我撞到了砖墙。我有一个视图文件header.php
,我想在网站的所有页面上使用它。在这个文件中,我想输出$total_items
,它的值与我在控制器(Items
)中的getTotalItems()
方法中的$total_items
相同。这与具有查询CCD_ 7的模型CCD_。
我遇到的问题是,尽管localhost/somemvcproject/items/get_total_items
输出$total_items
没有任何问题,但我键入的任何其他URL都无法识别它或从ItemsModel
中提取它。我知道这是由于我的URL路由的设置,例如localhost/somemvcproject/controller/action/param1/param2/param3
等,并且我还没有创建一个名为header-per-say的控制器。但是,对于本质上不相关的视图,我如何从Items
getTotalItems()
访问$total_items
(或任何其他变量)呢。
唯一接近解决方案的是,每次我希望包含header.php时,都会在每个控制器中加载ItemsModel
,否则$total_items
是一个"未定义的变量"。但对于网站的每一页来说,这似乎都很荒谬。
我想做的是类似的事情
`
<!--header.php-->
<html>
<head>
<title>My Items</title>
</head>
<body>
<div id="header">
<?php echo $total_items ?>
</div>
</body>
</html>
`
如何访问$total_items
?
您可以在每个控制器中调用您的模型查询,无论您想在哪里获取$total_items
,或者您可以用自己的控制器类扩展当前的控制器类,并将方法放入控制器类中。
由于您还没有声明您的框架,所以很难向您展示编码示例。
您可以在加载页面时请求调用控制器来获取数据。示例:
// use document ready function to make call on document load
$(document).ready(function()
//create ajax call
});
我认为您的解决方案是正确的。我想添加的唯一一件事是创建一个parent controller
,由所有控制器继承,在这里计算$total_items
并将其传递给视图。
然后,您必须确保调用了某种初始化函数;这很可能是CCD_ 21。
类似于:
abstract class ControllerBase
{
function __contruct()
{
$total_items = getTotalItems();
// Pass the $total_items to the views as you normally do
}
}
然后每个控制器都应该继承基类:
class MyController extends ControllerBase
{
// Do the stuff
}
不过,您需要记住,如果在子类中实现__construct()
,则必须调用父类的:
class MyController extends ControllerBase
{
function __construct()
{
parent::__construct();
// MyController's own stuff
}
}
这样,在调用action
时,$total_items
变量已经计算完毕,并可用于视图。