从开始,让我们专注于订单控制器.
所以我的订单由许多子视图组成.例如,详细信息,历史记录,地址,附件,笔记等.我把它们放在一个jQuery标签界面上.
我们来看一些代码
layout.PHP中
<div class="page-content"> <div class="row"> <div class="col-md-12"> <ul class="nav nav-tabs responsive hidden-xs hidden-sm"> <li class="<?PHP echo ($activeTabSub === "1") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Master details</a> </li> <li class="<?PHP echo ($activeTabSub === "2") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">History</a> </li> <li class="<?PHP echo ($activeTabSub === "wyk") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Address</a> </li> <li class="<?PHP echo ($activeTabSub === "3") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Files</a> </li> <li class="<?PHP echo ($activeTabSub === "4") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Notes</a> </li> <li class="<?PHP echo ($activeTabSub === "7") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> </li> <li class="<?PHP echo ($activeTabSub === "8") ? "active" : ""; ?>"> <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> </li> <li class="<?PHP echo ($activeTabSub === "9") ? "active" : ""; ?>"><a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> </li> </ul> </div> </div> <?PHP $this->load->view($widget,$activeTabSub); ?> <?PHP $this->load->view($main_content,$activeTabSub); ?> </div>
在我的示例中,$widget视图是一个子视图,它是一个带有工具的窗口小部件,例如每个单独的activeTabSub的不同编辑/添加按钮. $main_content是每个人的html视图.
现在为控制器[订购]
public function functiontolink1() { $data['main_content'] = 'x/y'; $data['widget'] = 'x/widget'; $data['heading'] = ""; $data['activeTab'] = 'pzlec'; $data['activeTabSub'] = '2'; $data['strona'] = 'text'; $data['dzial'] = 'text'; $seg= $this->uri->segment(3); $data['zgl'] = $seg; if(isset($seg)){ $data['pracownicy'] = $this->Zlecenia_model->pracownicy($zgloszenie); switch($this->userGroup){ case 1 : $data['main_content'] = 'x/y'; break; case 2 : $data['main_content'] = 'x/y'; break; case 3 : $data['widget'] = 'Client/x/widget'; $data['main_content'] = 'Client/x/y'; break; default: show_404(); break; } $this->load->view('Client/x/layout',$data); }else{ show_404(); } } public function functiontolink2() { $data['widget'] = 'x/widget'; $data['heading'] = ""; $data['activeTab'] = 'pzlec'; $data['activeTabSub'] = '2'; $data['strona'] = 'text'; $data['dzial'] = 'text'; $seg= $this->uri->segment(3); if(isset($seg)){ $data['zgl'] = $seg; $data['json'] = $this->Zlecenia_model->getSingle($zgloszenie); $vvv= json_decode($data['json']); $data['client'] = $this->Order_model->getclient($vvv[0]->klient); switch($this->userGroup){ case 1 : $data['main_content'] = 'x/y'; break; case 2 : $data['main_content'] = 'x/y'; break; case 3 : $data['widget'] = 'Client/x/widget'; $data['main_content'] = 'Client/x/y'; break; default: show_404(); break; } $this->load->view('Client/x/layout',$data); $this->load->view('zgloszenie/layout',$data); }else{ show_404(); } }
你可以想像,我有9个这样的视图功能的每个链接.当我想要获得一些数据时,问题就开始了,即这9个子视图中的客户端数据 – 只有一个不是每个页面都打了[tab].我不太确定我的设计尝试是否完美.你有一些建议吗?
我对你在做什么的印象是 – 你正在尝试在控制器或视图中做任何事情.在这里这个代码在你的控制器
$data['main_content'] = 'x/y'; $data['widget'] = 'x/widget'; $data['heading'] = ""; $data['activeTab'] = 'pzlec'; $data['activeTabSub'] = '2'; $data['strona'] = 'text'; $data['dzial'] = 'text';
这太具体了.一个控制器应该是一个高层次的老板 – 你不会打扰低级细节. “从数据库中得到这个 – 它是否回来了?如果是,那么这样做,如果你不这样做的话.
换个方法 – 低级细节会不断变化.你必须规划这些变化.并且您不想持续更改控制器,因为任何错误都会导致应用程序关闭.
所以这是什么模型.再次,人们会与此争论,不要说应该是图书馆或者帮助者或者其他的.关键是你想隔离这些低级别的细节,你想把它们放在一个有意义的地方.所以从现在起六个月,你可以查看文件名,并且有一个体面的想法,你需要去做更新.更好地拥有10个具有特定名称和特定任务的模型,然后是几个超级模型,试图做太多.
并说出试图做太多 – 重构这些控制器的方法,使他们不会这么做这么多不同的事情.例如,如果您要显示404,因为$seg不在那里,为什么要拉一堆数据?检查$seg是否有效应该是第一个任务.如果其有效则转到下一个方法.如果它无效,那么不显示404 – 显示一个特定于错误的礼貌页面.那么当它发生时你有机会弄清楚这个问题是什么.
最后我建议 – 使您的布局模板完全中性 – 换句话说,没有HTML代码.它只是调用其他视图.那又是怎么做的?它将低级细节(如html和css布局代码)推送到自己的文件中.布局模板只是调用布局视图.所以当你需要做出改变,它明确的去哪里,如果你犯错误,你不会突然把你的模板 – 你把它限制在一个视图文件,这将会更容易处理.