0

次のように Web アプリケーションを構築するために、CodeIgniter Frameworkを使用しています。

私のデフォルトのコントローラーは次のようなものです。

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 フレームワークを尊重していますか?

4

2 に答える 2

2

私は個人的にそのような解決策が好きではありませんが、「それは正しいですか」は相対的ですがMY_Controller、他のすべてのコントローラーから拡張されるメソッドを作成し、givemenuメソッドを追加して、すべてのコントローラーから呼び出すことができるようにします。コントローラーindexメソッドで、それを呼び出して、その戻り値を配列に追加し、それをビューに渡します。

于 2012-05-17T15:06:29.657 に答える
1

これを行うには多くの方法があります。givemenuメソッドの作業を行うためのヘルパーまたはライブラリを作成してみませんか?

または、Lexのようなテンプレートパーサーを使用しますか?https://github.com/happyninjas/lex

何かを含めるだけで、コントローラーとビューの保守がはるかに簡単になり、JavaScriptに依存する必要がなくなります。

于 2012-05-17T15:57:33.997 に答える