尊重MVC框架



我正在使用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框架吗?

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

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

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

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

最新更新