不幸的是,bootstrap.php 的作用域是bootstrap.php,所以一旦 PHP 完成对 bootstrap.php 的解析,$adv_types 变量就会超出作用域。
您可以采取多种方法,具体取决于您的实际需求。
解决方案 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'));
}
}
这将允许您的任何视图访问$adv_types 数组。
解决方案 2:您可能需要在 CakePHP 应用程序中的任何位置访问此变量
如果您必须在应用程序的其他位置访问 $adv_types 变量,您可以将其添加到 Configure 集合中。在bootstrap.php:
Configure::write('NameOfYourAppAsNamespace.adv_types', array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'));
我建议使用您的项目名称作为伪命名空间; adv_types 不太可能与其他标识符发生冲突,但如果您开始更频繁地使用这种方法,那么您产生冲突的机会就会增加。此外,这允许您将存储在 Configure 集合中的数据分组到一个命名空间下,便于调试。
无论如何,这种方法将允许您通过调用 Configure::read() 在 CakePHP 保护伞下的任何范围内访问变量。因此:
$adv_types = Configure::read('NameOfYourAppAsNamespace.adv_types');
解决方案 3:您绝对必须将此变量用作全局变量
如果您绝对必须将此作为标准 PHP 全局变量,您可以执行以下操作:
$GLOBALS['adv_types'] = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее');
在这样做之前,请考虑这是否是绝对必要的。全局变量是一件非常麻烦的事情,您应该有一个明确且当前的需求来证明它的合理性。
编辑/更新!
谷歌翻译中的 30 秒让我发现您的数组包含与键对应的翻译。您可能想使用 CakePHP 的 Internationalization & Localization 功能进行调查,以抽象出英语和俄语术语在 top/left/right/bottom(以及其他所有内容)之间的区别。