Стремясь сохранить мой код DRY, я хотел бы иметь возможность определять переменные «cross controller».
Классическим примером является то, что я хотел бы получить доступ к некоторым элементам конфигурации, загруженным в мой bootstap.
Каков наилучший способ достижения этого?
Тим
Вы всегда можете использовать контейнер Di.
Как только вы зарегистрируете компонент в Di, он доступен в контроллере магическим методом. Например:
// Bootstrap $configFile = ROOT_PATH . '/app/config/config.ini'; // Create the new object $config = new \Phalcon\Config\Adapter\Ini($configFile); // Store it in the Di container $this->di->setShared('config', $config);
и в вашем контроллере это просто:
$config = $this->config;
Если вы создаете базовый класс контроллера, вы можете передать эти объекты в представлении, если это необходимо:
$this->view->setVar('config', $this->config);
Наконец, контейнер Di может действовать также как реестр, где вы храните элементы, которые вы, возможно, захотите использовать в своем приложении.
Для примера загрузки и доступа к объектам в контроллерах обратитесь к репозиторию phalcon / website . Он, помимо прочего, реализует шаблоны начальной загрузки и базового контроллера.
Ниже приведена моя настройка.
[PHP] 5.4.1 [phalcon] 1.2.1
Вот отрывок из моего загрузочного файла. (/ App-root / public / index.php)
$di = new \Phalcon\DI\FactoryDefault(); // I'll pass the config to a controller. $di->set('config', $config); $application = new \Phalcon\Mvc\Application(); $application->setDI($di); echo $application->handle()->getContent();
И это выдержка из моего базового контроллера. (/ App-root / app / controllerlers / ControllerBase.php)
class ControllerBase extends Phalcon\Mvc\Controller { protected $config; protected function initialize() { $this->config = $this->di->get('config'); $appName = $this->config->application->appName;