如何在bootstrap.php中包含一个单独的文件,该文件适用于应用程序范围的常量和其他应用程序范围的Configure :: write值?

时间:2015-02-06 10:58:35

标签: php cakephp cakephp-3.0

我正在使用CakePHP3。

我更喜欢将我的应用程序范围的PHP常量和Configure::write值放在一个单独的php文件中,通常称为constants.php

然后在bootstrap.php的末尾,我将包含此constants.php文件。

我对PHP常量没有任何问题。但是,我在此单独文件中使用Configure::write时遇到问题。

有没有办法在单独的php文件中使用Configure::write?我尝试过使用

use Cake\Core\Configure;

constants.php内,但我仍然会收到错误。

修改

constants.php

的示例
<?php
/**
 * provide all the kinds of site ID
 */
Configure::write('ADMINISTRATOR_SIDEBAR', array(
    'quotations' => [
        'link' => '/quotations',
    ],
    'projects' => [
        'sub_menu' => [
            [
                'title' => 'Project 1',
                'icon' => '',
                'link' => '/job_projects/view/5',
            ]
        ],
        'link' => '/job_projects'
    ]
));

当我写那个然后

require __DIR__ . '/constants.php';

bootstrap.php

的最后一行

我得到了

Error: Class 'Configure' not found 
File ...constants.php 
Line: 8

当我在use Cake\Core\Configure;的顶部添加constants.php时,错误将被删除。

这是否意味着我的问题已解决?

1 个答案:

答案 0 :(得分:1)

你有那么多常数吗?改为使用类常量:

class UserType {
    const ADMIN = 'admin';
    const USER = 'user';
}

IMO最好让它们按类组织,而不是拥有大量的全局常量。我大部分时间都不喜欢常量,因为你不能在运行时永远不会改变它们。所以这只留下了两个用例:

  1. 在运行时永远不会更改的事情(很少见)
  2. 将它们用于“标识符”而不是字符串
  3. 解释2.多一点:$userRole === 'admin'因为拼写错误而失败,你不会得到一个错误,并且可能最终调试情况非常糟糕,而$userRole === UserRole::ADMIN会抛出错误错误,如果它不存在。

    您没有显示任何代码,因此不知道您在使用Configure时遇到了什么问题。你为什么不在你要用该方法加载的文件中使用Configure::load()和`$ config = []'数组?