如何将一个变量从一个没有';t有相同的url


How can I pass a variable to a view from a controller that doesn't have the same url?

我撞到了砖墙。我有一个视图文件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变量已经计算完毕,并可用于视图。