定义全局数组常量以在视图中使用

bau*_*r79 5 cakephp constants

我想定义全局数组常量

bootstrap.php中的代码

$adv_types = array('top' => '????', 'left' => '?????', 'right' => '??????', 'bottom' => '??????');

视图文件中的代码

echo $form->input('Adv.type', array('type' => 'select', 'option' => $adv_types, 'label' => '????? ???????'));

但是cakephp给出了错误:

"未定义的变量:adv_types"

Dan*_*ght 8

不幸的是,范围bootstrap.phpbootstrap.php,所以$adv_types一旦PHP完成解析,变量就会超出范围bootstrap.php.

您可以采取多种方法,具体取决于您的实际要求.

解决方案1:您在许多视图中都需要这些变量

如果需要变量在所有视图中可用,则应定义并设置它AppController::beforeRender().

app/app_controller.php:

class AppController extends Controller
{

    function beforeRender()
    {
        parent::beforeRender();

        $adv_types = array('top' => '????', 'left' => '?????', 'right' => '??????', 'bottom' => '??????');
        $this->set(compact('adv_types'));
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您的任何视图访问该$adv_types数组.

解决方案2:您可能需要在CakePHP应用程序中的任何位置访问此变量

如果您必须$adv_types在应用程序的其他位置访问该变量,则可以将其添加到Configure集合中.在bootstrap.php:

Configure::write('NameOfYourAppAsNamespace.adv_types', array('top' => '????', 'left' => '?????', 'right' => '??????', 'bottom' => '??????'));
Run Code Online (Sandbox Code Playgroud)

我建议使用项目名称作为伪命名空间; adv_types不太可能与其他标识符冲突,但如果您更频繁地开始使用此方法,则会增加创建冲突的可能性.此外,这允许您将存储在Configure集合中的数据分组到一个名称空间下,这对于调试很方便.

无论如何,这种方法将允许您通过调用访问CakePHP伞下任何范围内的变量Configure::read().从而:

$adv_types = Configure::read('NameOfYourAppAsNamespace.adv_types');
Run Code Online (Sandbox Code Playgroud)

解决方案3:您绝对必须将此变量用作全局变量

如果您绝对必须将此作为标准PHP全局变量,则可以执行以下操作:

$GLOBALS['adv_types'] = array('top' => '????', 'left' => '?????', 'right' => '??????', 'bottom' => '??????');
Run Code Online (Sandbox Code Playgroud)

在此之前,请考虑这是否是必要的.全局变量是一个非常混乱的业务,你应该有一个明确和现在的需要来证明它.


编辑/更新!

Google翻译中的三十秒让我发现您的数组包含与键对应的翻译.您可能想要调查使用CakePHP的国际化和本地化功能来抽象出顶部/左侧/右侧/底部(以及其他所有内容)的英语和俄语术语之间的区别.


Ish*_*Ish 5

这些需要在app_controller.php中设置,然后传递给您的视图

// app_controller.php
class AppController extends Controller {
        var $adv_types = array('top' => '????', 'left' => '?????', 'right' => '??????', 'bottom' => '??????');
        function beforeFilter() {
            $this->set('adv_types', $this->adv_types);
        }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,bootstrap.php不是这个常量的正确文件