php – 控制器设计 – 多子视图 – 试图添加一个主控

前端之家收集整理的这篇文章主要介绍了php – 控制器设计 – 多子视图 – 试图添加一个主控前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问候我不太清楚如何在我的项目中实现我的愿景.

从开始,让我们专注于订单控制器.

所以我的订单由许多子视图组成.例如,详细信息,历史记录,地址,附件,笔记等.我把它们放在一个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].我不太确定我的设计尝试是否完美.你有一些建议吗?

@H_502_20@
好的 – 这是免责声明,编码风格是个人的,有些人根本不会同意我的建议.

我对你在做什么的印象是 – 你正在尝试在控制器或视图中做任何事情.在这里这个代码在你的控制器

$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布局代码)推送到自己的文件中.布局模板只是调用布局视图.所以当你需要做出改变,它明确的去哪里,如果你犯错误,你不会突然把你的模板 – 你把它限制在一个视图文件,这将会更容易处理.

原文链接:https://www.f2er.com/php/139305.html

猜你在找的PHP相关文章