【问题标题】:What is the best way to create global variables in CakePHP?在 CakePHP 中创建全局变量的最佳方法是什么?
【发布时间】:2010-10-12 23:29:44
【问题描述】:

我想在 CakePHP 中创建一个全局变量。如果我在 app_controller.php 中定义了一些东西,比如

var $varName

我可以访问

$this->varName

来自我的任何控制器,但我无法从模型中获取它。

如何创建可从模型访问的全局变量?

$varName 的值直到运行时才知道,所以我不认为 bootstrap.php 是一个选项。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    CakePHP 的新Configure class 可以 用于存储和检索应用程序 或运行时特定的值。是 小心,这门课可以让你 存储任何东西,然后使用它 代码的任何其他部分

    【讨论】:

    • 这是一个古老的答案,但对于任何人来说,你都想知道为什么你应该“小心”,因为这个类是 a sure temptation to break the MVC pattern CakePHP was designed for. The main goal of Configure class is to keep centralized variables that can be shared between many objects. Remember to try to live by "convention over configuration" and you won't end up breaking the MVC structure we’ve set in place.
    • 这是为测试模式和实时模式放置全局变量的好地方吗?如果我们正在测试,我有一些例程我想表现得不同。
    【解决方案2】:

    要保存全局变量,请使用配置类。例如:

    Configure::write('Company.name','Pizza, Inc.');

    要稍后在代码的任何位置读取变量,请使用:

    配置::read('Company.name'); //yields: 'Pizza, Inc.'

    推荐的存储全局常量的文件在app/config/bootstrap.php

    有关详细信息,请参阅:
    配置类 - Configure Class CakePhp。 或关于引导的第 3.4.7 节

    【讨论】:

    • Ax 的回答是正确的,但我给这个 +1 也是为了举个例子——这正是我在谷歌搜索时所需要的。
    • 这很好,但如果数据是用户特定的,Session 类可能会有用
    【解决方案3】:

    你可以在 app/cofig/core.php 中声明全局变量

    Configure::write('variable Name','Variable Value');
    

    你可以这样打印:

    Configure::read('Variable Name'); 
    

    【讨论】:

      【解决方案4】:

      您的应用程序的全局函数和变量可以在 app/config/bootstrap.php 中定义

      更多信息见http://book.cakephp.org/view/48/Bootstrapping-CakePHP

      【解决方案5】:

      您可以在 app/config/ 目录下的 bootstrap.php 中定义常量。它可以全局用于任何控制器或视图。

      【讨论】:

        【解决方案6】:

        您可以尝试使用 bootstrap.php (cake 3) 定义常量

        此文件非常适合许多常见的引导任务:

        定义便利函数。

        声明常量。

        定义缓存配置。

        定义日志记录配置。

        加载自定义变形。

        加载配置文件。

        参考https://book.cakephp.org/3.0/en/development/configuration.html#bootstrapping-cakephp

        【讨论】:

          【解决方案7】:

          其实,你为什么要这么做?模型应该不知道控制器的存在。

          如果它是一个业务(模型)对象,就这样创建它。如果没有,模型不应该知道它。

          【讨论】:

          • 一些全局变量非常标准。例如,我的测试服务器和生产服务器位于两个非常不同的域中,我经常需要创建指向它们的链接......即使在模型中也是如此。因此,为此拥有一个全局变量并没有真正违反任何设计原则。它实际上可能使您免于破坏设计原则。
          • 有一些简单的事情是不值得额外的数据库调用/cpu cyles/磁盘读取来制作模型等,只是为了一个简单的值列表。设计原则就是——原则。有时一个原则并不适用于现实世界。
          猜你喜欢
          • 1970-01-01
          • 2011-12-01
          • 2022-01-01
          • 2016-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-08
          • 1970-01-01
          相关资源
          最近更新 更多