我正在使用CAKEPHP框架开发Web应用程序。因此,我需要在多个页面上请求一个变量(所有页面都有不同的控制器)。很明显我在几个页面上都出错了,因为变量没有在所有不同的控制器中声明。
有解决方法吗?我已经尝试过app :: import来导入另一个控制器中的控制器,但是这似乎没有用(仍然会得到一个未定义的变量错误)。
Thnx为您的合作!
此致 西蒙
答案 0 :(得分:2)
Duplicate question,但我觉得它的表达方式有点好,所以我会在这里粘贴我的答案:
站在deceze的评论和DavidYell的回答的肩膀上,我认为他们已经设法找到了你想要达到的正确观点。也许。因此,对你所看到的和你所拥有的东西有着松散的理解......
默认情况下,
PagesController::display()
方法会生成主页视图(home.ctp
)。我怀疑这就是你所说的。也就是说,您在SectionsController
方法中设置的变量将无法用于您的主页,而该主页是由不同控制器中的其他方法创建的。如果您想要一个可用于所有视图的变量,您可以执行以下操作:
- 您可以在
config/core.php
文件中设置变量(通常不推荐)- 如果它是常量,您可以在
config/bootstrap.php
中设置它。通过这种方式,我的意思是,这是一个你要硬编码的价值,而不是动态生成的东西。是否将变量创建为常量无关紧要。- 您可以使用
醇>AppController
或beforeFilter()
方法在beforeRender()
中输入内容。所有自定义控制器(假设您遵循协议)都继承自AppController
。如果您选择此路径,请复制cake/libs/controller/app_controller.php
并将其放在app/
目录中。根据我的理解,这些是我认为最能满足您需求的方式。
答案 1 :(得分:1)
您可以使用Configure.write ...更多信息here
答案 2 :(得分:0)
确保变量在所有页面上都可用的一种方法是在前端控制器上定义它(通常是index.php
)或任何其他总是包含的文件(例如全局配置),另一种选择可能是使用$_SESSION
超级全局。
答案 3 :(得分:0)
您可以使用callback methods中的beforeRender()
或beforeFilter()
AppController。 :)
每个页面请求都会被调用。 :)
答案 4 :(得分:0)
如果要从不同的控制器访问值,则需要将该值保存到数据库记录中,以便可以通过不同的控制器方法访问它。每个控制器调用都存在于其自己的上下文中,并且只能共享存储在脚本外部的数据。
在这种情况下,我创建了一个首选项表(包含id,id,name和value等字段)。然后向app_controller添加$ uses值,使其可供所有控制器使用。最后,只需通过查找电话抓住它。 (即$ foo = $ this-> Preferences-> find('first',array('conditions'=> array('name'='foo')));