一个变量和多个控制器

时间:2010-05-18 11:23:21

标签: php cakephp variables

我正在使用CAKEPHP框架开发Web应用程序。因此,我需要在多个页面上请求一个变量(所有页面都有不同的控制器)。很明显我在几个页面上都出错了,因为变量没有在所有不同的控制器中声明。

有解决方法吗?我已经尝试过app :: import来导入另一个控制器中的控制器,但是这似乎没有用(仍然会得到一个未定义的变量错误)。

Thnx为您的合作!

此致 西蒙

5 个答案:

答案 0 :(得分:2)

Duplicate question,但我觉得它的表达方式有点好,所以我会在这里粘贴我的答案:

  

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

     

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

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

    根据我的理解,这些是我认为最能满足您需求的方式。

答案 1 :(得分:1)

您可以使用Configure.write ...更多信息here

More on configure class

答案 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')));