【问题标题】:How can I pass a variable to a view from a controller that doesn't have the same url?如何从不具有相同 url 的控制器将变量传递给视图?
【发布时间】:2014-11-20 08:34:07
【问题描述】:

我撞到了一堵砖墙。我有一个视图文件header.php,我想在网站的所有页面上使用它。在这个文件中,我想输出$total_items,其值与我在控制器中的getTotalItems() 方法中的$total_items 相同(Items)。这与带有查询 SELECT count(item_id) as total_items FROM items; 的模型 ItemsModel 相关联。

我遇到的问题是尽管localhost/somemvcproject/items/get_total_items 输出$total_items 没有任何问题,但我输入的任何其他URL 都无法识别它或从ItemsModel 中提取它。我知道这取决于我的 URL 路由的设置,例如localhost/somemvcproject/controller/action/param1/param2/param3 等等,而且我还没有创建一个名为 header 的控制器。但是我怎样才能从ItemsgetTotalItems() 访问$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

【问题讨论】:

  • 你使用的是哪个框架?
  • 无框架。只是我的一个基于 mvc 的实验性螺母和螺栓。

标签: php html oop model-view-controller


【解决方案1】:

您可以在每个控制器中调用模型查询,无论您想获取 $total_items 还是 您可以使用自己的控制器类扩展您当前的控制器类,并将您的方法放入您的控制器类中。

由于您尚未声明您的框架,因此很难通过编码示例向您展示。

【讨论】:

    【解决方案2】:

    您可以在加载页面时请求调用控制器来获取数据。 示例:

         // use document ready function to make call on document load
    
           $(document).ready(function() 
    
          //create ajax call
    
                }); 
    

    【讨论】:

      【解决方案3】:

      我认为您的解决方法是正确的。我唯一要添加的是您创建一个parent controller,由您计算$total_items 并将其传递给视图的所有控制器继承。

      然后您必须确保调用了某种初始化函数;这很可能是__construct()

      类似:

      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 变量已经被计算出来并可供视图使用。

      【讨论】:

      • 感谢您的回复。很有帮助。
      猜你喜欢
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多