Контроллер действий не доступен напрямую через плагин фронт-контроллера.Это диспетчер, который создает экземпляр объекта контроллера, и он, кажется, не сохраняет его в доступном месте.
Однако, контроллер доступен из любых зарегистрированных помощников действий.Так как у помощников действий есть хук preDispatch
, вы можете делать инъекции там.
Итак, в library/My/Controller/Helper/Inject.php
:
class My_Controller_Helper_Inject extends Zend_Controller_Action_Helper_Abstract
{
public function preDispatch()
{
$controller = $this->getActionController();
$controller->myParamName = 'My param value';
}
}
Затем зарегистрируйте экземпляр помощника в application/Bootstrap.php
:
protected function _initControllerInject()
{
Zend_Controller_Action_HelperBroker::addHelper(
new My_Controller_Helper_Inject()
);
}
И, как всегда, обязательно включите My_
в качестве пространства имен автозагрузчика в configs/application.ini
:
autoloaderNamespaces[] = "My_"
Затем в контроллере получите доступ к значению напрямуюкак общедоступная переменная-член:
public function myAction()
{
var_dump($this->myParamName);
}
Одна вещь, на которую следует обратить внимание: поскольку помощник использует хук preDispatch()
, я считаю, что он будет вызываться при каждом действии, даже при внутреннем forward()
.