CodeIgniter嵌套控制器?

Nic*_*las 1 nested codeigniter controllers

我是CodeIgniter的新手,我希望我的问题能有一个简单的答案.

我有一个网站,里面有几个菜单项(menuA,menuB和menuC).我用控制器中的一个主控制器,index(),menuA(),menuB()和menuC()对其进行了建模.被调用函数设置会话值currentMenu并包括标题,X,页脚.其中X取决于所调用的函数.然后标题高亮显示选择的菜单.

在menuC(我的webapp中的帐户设置)中,我想有一个不同的控制器来控制AccountSettings/NotLoggedIn的子视图.

从逻辑上讲,我希望menuC()包含页眉和页脚,然后将调用转发给管理登录或子页面的子控制器.

我使用错误的框架还是有直接的方法来实现这一目标?

Swi*_*ift 5

我认为听起来你并不了解如何将MVC应用到你的结构中.想象一下:

控制器代表用户可以与之交互的应用程序的一些方面.例如,我可以拥有一个items允许用户创建,读取,更新或删除的控制器items.所有与之交互的逻辑items都由该控制器处理(意味着它调用items模型并呈现必要的视图).

在您的情况下,听起来您正在构建一个pages控制器来处理显示用户可能调用的特定页面的内容.所以你的控制器看起来像这样:

class Page extends CI_Controller {

    public function index()
    {
        // Logic to render home page
    }

        public function about()
    {
        // Logic to render the about page
    }

    //  ... etc ...
Run Code Online (Sandbox Code Playgroud)

当您处理具有重叠的复杂网站时,视图会变得有点棘手.我在此过程中发现的最有用的技巧之一是使用扩展库来减少冗余.这是我一直使用的那个:http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html.使用模板库,您可以轻松定义包含页眉和页脚的布局,然后只传入要显示的内容的部分内容.

当你想在菜单中处理逻辑时,你需要做的就是传递一个带有页面名称的变量,然后做一些基本的PHP渲染菜单.

// Say we pass in a variable called $current to our view
// $current contains the name of the current page
// So say $current = 'About' for this example.


$sitemenu = array(
    array('/', 'Home'),
    array('/about', 'About'),
    array('/help', 'Page 2'),
    array('/contact', 'Page 3')
); ?>
<nav>
  <ul>
  <?php foreach( $sitemenu as $page) { ?>
     <?php if($current == $page[1]) { ?>
         <li class="current"><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li>
     <?php } else { ?>
         <li><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li>
     <?php } ?>
  <?php } ?>
  </ul>
</nav>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!