【问题标题】:Respecting MVC framework尊重 MVC 框架
【发布时间】:2012-05-17 14:54:39
【问题描述】:

我正在使用CodeIgniter Framework 来构建一个 Web 应用程序,如下所示。

我的默认控制器是这样的,

class Start extends CI_Controller {
    public function index() 
    {  
        $view_data = array(
            'foo' => 'bar',
            'top_bar_view' => 'top_bar_view',
            'top_bar_params' => array(
                'param1' => 'val1',
                'param2' => 'val2',
                'param3' => 'val3', 
                'param4' => 'val4',
                'param5' =>  'val5'
            )
        );
        $this->load->view('main_view', $view_data);
    }
} 

它加载 main_view,这是一种母版页,我在其中加载通过 $view_data 传递的视图文件。

然后,在这个 top_bar_view 上,我想调用一个控制器,以便根据一些数据构建一个菜单。现在,我在这个局部视图中使用 AJAX 调用来完成此操作。

script type="text/javascript">
    $(function() {
        $.post('index.php/menu/givemenu', {}, function(data) { 
             $('#topMenuBar').append(data); });
        });

<img alt="alt_data" src="assets/img/<?php echo $image_name; ?>" />
<div>
    <img alt="<?php echo $descricao_editora; ?>" src="assets/img/<?php echo $image_name; ?>" />
</div>
<div class="divSpacer20pxRight"></div>
<div class="divTituloProduto">
    <?php echo $titulo_produto; ?>
</div>
<div class="clear"></div>
<div id="topMenuBar" class="divTopMenuBar"></div>
<div class="clear"></div> 

这是否正确并尊重 MVC 框架?

【问题讨论】:

    标签: codeigniter controller


    【解决方案1】:

    我个人不喜欢这种解决方案,但“它是否正确”是相对的,但我会创建一个 MY_Controller,它将从我的所有其他控制器扩展并添加 givemenu 方法,以便我可以调用它从所有控制器。在您的控制器 index 方法上,您调用它并将其返回添加到您的数组中并将其传递给视图。

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。为什么不创建一个帮助程序或库来完成您的 givemenu 方法的工作?

      或者使用像 Lex 这样的模板解析器? https://github.com/happyninjas/lex

      如果您只包含一些内容,它将使您的控制器和视图更易于维护,并且意味着您不必依赖 JavaScript。

      【讨论】:

        猜你喜欢
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多