【问题标题】:CodeIgniter nested controllers?CodeIgniter 嵌套控制器?
【发布时间】:2011-07-13 17:36:39
【问题描述】:

我是 CodeIgniter 的新手,希望我的问题能得到一个简单的答案。

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

在 menuC(我的 web 应用程序中的帐户设置)中,我想要一个不同的控制器来控制 AccountSettings/NotLoggedIn 的子视图。

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

我是否使用了错误的框架,还是有直接的方法来实现这一点?

【问题讨论】:

  • 我认为你应该在这里放一些代码,因为答案可能会因你的代码而异。

标签: codeigniter nested controllers


【解决方案1】:

我认为您似乎不了解如何将 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 ...
当您处理重叠的复杂网站时,

视图 可能会有点棘手。我在此过程中发现的最有用的技巧之一是使用模板库来减少冗余。这是我一直使用的: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>

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2013-01-18
    • 2021-03-01
    相关资源
    最近更新 更多