【问题标题】:one variable and multiple controllers一变量多控制器
【发布时间】:2010-05-19 04:06:55
【问题描述】:

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

有解决办法吗?我已经尝试使用 app::import 将控制器导入另一个控制器,但这似乎不起作用(仍然出现未定义变量错误)。

感谢您的合作!

问候, 西蒙

【问题讨论】:

  • 你使用的是哪个版本的 cakephp?

标签: php cakephp variables


【解决方案1】:

Duplicate question,但我认为它的措辞更好,所以我将在此处粘贴我的答案:

站在 deceze 的评论和 DavidYell 的回答的肩膀上,我认为他们已经设法对你想要达到的目标有了一个不错的看法。也许。因此,对你所看到的和你拥有的东西的松散理解......

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

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

这些是我认为最能满足您的需求的方式。

【讨论】:

  • 好吧,我尝试了所有三种解决方案,但没有一个适合我.. :(
  • 也许您可以更具体地了解您的应用场景,然后呢?所有这些都将使可变数据可用于视图。如果它不存在,那么我们可能需要更多信息。
【解决方案2】:

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

More on configure class

【讨论】:

    【解决方案3】:

    确保变量在所有页面上可用的一种方法是在前端控制器(通常为index.php)或任何其他始终包含的文件(例如全局配置)上定义它,另一种选择可能是使用$_SESSION超级全球。

    【讨论】:

      【解决方案4】:

      您可以使用AppController 中的beforeRender()beforeFilter() callback methods。 :)

      这些将在每个页面请求时调用。 :)

      【讨论】:

        【解决方案5】:

        如果您从不同的控制器访问一个值,您需要将该值保存到数据库记录中,以便可以通过不同的控制器方法访问它。每个控制器调用都存在于自己的上下文中,并且只能共享存储在脚本外部的数据。

        在这种情况下,我创建了一个首选项表(包含诸如 ID、名称和值之类的字段)。然后将 $uses 值添加到 app_controller 以使其可用于所有控制器。最后,只需通过 find 调用即可获取它。 (即 $foo = $this->Preferences->find( 'first', array('conditions'=>array('name'='foo')));

        【讨论】:

          猜你喜欢
          • 2013-05-21
          • 1970-01-01
          • 2012-12-15
          • 2020-11-23
          • 1970-01-01
          • 2014-06-20
          • 2016-09-02
          • 1970-01-01
          • 2017-03-23
          相关资源
          最近更新 更多