问候我不太清楚如何在我的项目中实现我的愿景.

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

所以我的订单由许多子视图组成.例如,详细信息,历史记录,地址,附件,笔记等.我把它们放在一个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布局代码)推送到自己的文件中.布局模板只是调用布局视图.所以当你需要做出改变,它明确的去哪里,如果你犯错误,你不会突然把你的模板 – 你把它限制在一个视图文件,这将会更容易处理.

php – 控制器设计 – 多子视图 – 试图添加一个主控的更多相关文章

  1. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?

    本篇文章中,作者主要介绍了如何基于Parse特点,打造一款类似Instagram的应用,完整而清晰的步骤,为开发者提供一次绝佳的学习体验。这款应用将完全使用Swift语言开发,Swift是苹果最新的编程语言,用于打造iOS应用。Parse并不用完全重写Swift,所以我们需要创建一个桥接头来处理它俩的兼容性。如果导入是完整的,Parse会及时提示。至此,我们在Parse中的全部工作已经完成。Parse是用Objective-C搭建的,而我们的项目则是用Swift语言,两者之间需要适当的设置才能兼容。

  2. swift – 如何将firebase数据库数据作为UICollection View的数据源?

    如果有帮助,这是我的Firebase数据.例如,“Banks”将是类别名称,单元格将由银行下的所有条目填充.更新:我想要实现的是类似于AppstoreUI,不同类别的应用程序和每个类别是具有水平滚动的集合视图.在我的应用程序中,企业属于firebase中列出的不同类别,每个类别都可以水平滚动.如何更新下面的集合视图属性?

  3. android – Room Invalidation tracker初始化两次

    我有一个水平回收站视图,其中包含自定义项目.每个项目都可以在Recycler视图中保存当前项目的位置.我想使用拖放移动项目时更新项目位置.但是当水平视图中有三个以上的项目时,数据会被删除.请帮帮我.SourceCode这是我在Logcat中得到的:E/ROOM:Invalidationtrackerisinitializedtwice:/.E/Itemmoved:Counterfrom3nexti

  4. android – 使用CursorLoader在填充列表视图之前显示进度指示器

    在我的列表视图没有填充数据库数据时,有什么更好的方法来显示进度指示器?

  5. php – 如何在没有数据库表的情况下创建yii模型

    我创建了一个没有数据库表的yii模型,但现在的问题是,每当我试图在视图文件中调用模型函数时,它都无法识别在视图中我称之为这样blah::model()–>sayHello(),然后我得到了死亡白页,为什么会这样?如果要创建没有表的Yii模型,可以使用CFormModel创建.您可以定义模型变量,规则和属性标签.使用CFormModel创建的更改密码表单的示例代码.

  6. php – Laravel – 语法错误,意外的文件结束

    我有一个网站在主机上工作正常,但我正在尝试安装在本地主机.我已经下载了所有内容并配置为在localhost上工作–数据库和URL.问题是这个错误:UnhandledExceptionMessage:Syntaxerror,unexpectedendoffileLocation:C:\ProgramFiles(x86)\EasyPHP-12.1\www\laravel\view.PHP(386):e

  7. php – Symfony2:基表或视图未找到:1146

    我一遍又一遍地看着我的PHPmyAdmin,数据库就是所有的字段和数据…

  8. php – PDOException语法错误或访问冲突1142,在创建引用其他视图的视图时

    对于遇到此问题的任何其他人,由于Laravel设置以下PDO连接选项而出现问题:我的解决方案是克隆我的数据库配置,覆盖PDO选项,然后在创建视图时使用该连接,而不是为我的整个应用程序启用EmulatePrepares:配置/database.PHP中移民为了帮助我调试这个,我很荣幸获得RyanVincent.

  9. 选择在php OOP设计中使用哪些类

    我试图找到’真实世界’的例子,但PHP代码告诉我如何使大象改变颜色或舞蹈并没有真正帮助…

  10. php – 在Apache CouchDB中按键搜索

    是否可以在ApacheCouchDB中按键值进行搜索?给出下面的样本数据:我可以在数据库中查询用户jsmith或有电子邮件jsmith@example.com的用户吗?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部