我正在使用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。