当我请求变量$ test时,我使用名为'sections'的MVC结构创建了一个页面(视图位于app / views / sections文件夹中,模型位于模型文件夹中,控制器位于controller文件夹中)工作正常,没有任何错误..
当我想在home.ctp中请求这个变量时,它会给我一个错误,说该变量是未定义的。
cakePHP中是否有任何方法可以在您想要的任何页面上请求此变量?
Thnx提前!
答案 0 :(得分:1)
在MVC堆栈中,您需要在控制器中使用数据设置变量,然后将它们传递给您的视图。
因此,在您的示例中,您需要在$this->set('myvar',$item);
中SectionsController
,然后在您的视图中,您将能够echo $myvar
。
请务必使用home()
控制器的Sections
方法进行设置,否则您的home
视图将无法使用此方法。
答案 1 :(得分:0)
站在deceze的评论和DavidYell的回答的肩膀上,我认为他们已经设法找到了你想要达到的正确观点。也许。因此,对你所看到的和你所拥有的东西有着松散的理解......
默认情况下,PagesController::display()
方法会生成主页视图(home.ctp
)。我怀疑这就是你所说的。也就是说,您在SectionsController
方法中设置的变量将无法用于您的主页,而该主页是由不同控制器中的其他方法创建的。如果您想要一个可用于所有视图的变量,您可以执行以下操作:
config/core.php
文件中设置变量(通常不推荐)config/bootstrap.php
中设置它。通过这种方式,我的意思是,这是一个你要硬编码的价值,而不是动态生成的东西。是否将变量创建为常量无关紧要。AppController
或beforeFilter()
方法在beforeRender()
中输入内容。所有自定义控制器(假设您遵循协议)都继承自AppController
。如果您选择此路径,请复制cake/libs/controller/app_controller.php
并将其放在app/
目录中。根据我的理解,这些是我认为最能满足您需求的方式。