【问题标题】:Phalcon: how to define constant which is visible on all Controller and ModelPhalcon:如何定义在所有控制器和模型上可见的常量
【发布时间】:2014-05-15 10:00:34
【问题描述】:

任何人都知道如何定义在应用程序的所有控制器和模型上可见的常量。

例如,我可以在哪里定义这些常量:

define('APP_CONST_ACTIVE', 1);
define('APP_CONST_INACTIVE', 0);
define('APP_CONST_ENABLE', 1);
define('APP_CONST_DISABLE', 0);

或者我应该在哪个类中定义这些常量:

class WhichClass
{
    const APP_CONST_ACTIVE = 1;
    const APP_CONST_INACTIVE = 0;
    const APP_CONST_ENABLE = 1;
    const APP_CONST_DISABLE = 0;
}

我希望这些常量在我的应用程序的所有控制器和模型上可见。


让我澄清一下我的问题。

我只想定义这些常量 1 次,我想在所有 Controller、Model 和 View 中访问它们。

例如在 CakePHP 中,如果在 app/Config/core.php 中,我定义如下:

Configure::write('ENABLE', 1);  

那么在所有 CakePHP 控制器、模型和视图中,我可以通过这种方式访问​​这些常量:

Configure::read('ENABLE');  

所以我的问题是:我应该在哪里定义这些在 Phalcon 的整个应用程序中可见的变量?也许在bootstrap 文件中,但是怎么做呢?

非常感谢。

【问题讨论】:

  • 让我澄清一下我的问题。我只想定义这些常量 1 次,我想在所有 Controller、Model 和 View 中访问它们。例如在 CakePHP 中,如果在 app/Config/core.php 中,我定义了以下内容: Configure::write('ENABLE.ENABLE', 1);配置::write('ENABLE.DISABLE', 0);然后在所有 CakePHP 控制器、模型和视图中,我可以通过这种方式访问​​这些常量: Configure::read('ENABLE.ENABLE');所以我的问题是:我应该在哪里定义这些在 Phalcon 的整个应用程序中可见的变量?非常感谢。

标签: model controller constants visible phalcon


【解决方案1】:

看:http://docs.phalconphp.com/en/latest/reference/cli.html 我定义了引导常数,我可以在任何地方使用。 这个对我有用。 对不起我的英语不好!

引导:

define('VERSION', '1.0.0');
[...]
application = new \Phalcon\Mvc\Application($di);
echo $application->handle()->getContent();

控制器:

namespace App\Controllers\xxx;
class IndexController extends ControllerBase
{
  public function indexAction()
  {
     echo VERSION;
  }
}

【讨论】:

    【解决方案2】:

    您可以使用任何一种方法。恕我直言,更好的方法是在类中使用它们与全局定义的常量。其余的 OOP 代码感觉更自然,您可以在逻辑上将常量分成类和命名空间,大多数 IDE 会更好地对待它们,因此以后重构/维护代码会更容易。

    显而易见,但是如果您使用带有常量的类并且您的问题是如何在任何控制器中使用它们:

    namespace My/Name/Space/Controller;
    
    use My/Name/Space/WhichClass;
    
    class AnyClass 
    {
        public function __construct() 
        {
            echo WhichClass:: APP_CONST_ACTIVE;
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以在 Controllers 目录中创建一个 ControllerBase.php 然后在文件内部使用初始化函数在所有控制器中插入任何供全局使用的东西

      代码应该是这样的:

      class ControllerBase extends Phalcon\Mvc\Controller
      {
          protected function initialize()
          {
             define('WORLD_SAVIOR', 313);
          }
      }
      

      然后在其他控制器中扩展基础:

      class IndexController extends CnotrollerBase
      {
        //echo WORLD_SAVIOR;
      }
      

      现在您可以在项目的每个文件中使用定义的常量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 2010-11-18
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多