如何在我的cakePHP应用程序的home.ctp中请求变量?

时间:2010-05-18 08:15:27

标签: php cakephp variables

当我请求变量$ test时,我使用名为'sections'的MVC结构创建了一个页面(视图位于app / views / sections文件夹中,模型位于模型文件夹中,控制器位于controller文件夹中)工作正常,没有任何错误..

当我想在home.ctp中请求这个变量时,它会给我一个错误,说该变量是未定义的。

cakePHP中是否有任何方法可以在您想要的任何页面上请求此变量?

Thnx提前!

2 个答案:

答案 0 :(得分:1)

在MVC堆栈中,您需要在控制器中使用数据设置变量,然后将它们传递给您的视图。

因此,在您的示例中,您需要在$this->set('myvar',$item);SectionsController,然后在您的视图中,您将能够echo $myvar

请务必使用home()控制器的Sections方法进行设置,否则您的home视图将无法使用此方法。

答案 1 :(得分:0)

站在deceze的评论和DavidYell的回答的肩膀上,我认为他们已经设法找到了你想要达到的正确观点。也许。因此,对你所看到的和你所拥有的东西有着松散的理解......

默认情况下,PagesController::display()方法会生成主页视图(home.ctp)。我怀疑这就是你所说的。也就是说,您在SectionsController方法中设置的变量将无法用于您的主页,而该主页是由不同控制器中的其他方法创建的。如果您想要一个可用于所有视图的变量,您可以执行以下操作:

  1. 您可以在config/core.php文件中设置变量(通常不推荐)
  2. 如果它是常量,您可以在config/bootstrap.php中设置它。通过这种方式,我的意思是,这是一个你要硬编码的价值,而不是动态生成的东西。是否将变量创建为常量无关紧要。
  3. 您可以使用AppControllerbeforeFilter()方法在beforeRender()中输入内容。所有自定义控制器(假设您遵循协议)都继承自AppController。如果您选择此路径,请复制cake/libs/controller/app_controller.php并将其放在app/目录中。
  4. 根据我的理解,这些是我认为最能满足您需求的方式。