В моем проекте Zend Framework 1 я пытаюсь добавить init в Bootstrap.php, который загрузит некоторые значения конфигурации, а затем поймает исключение, если значение конфигурации не существует. После того, как он поймает исключение, я хочу, чтобы он направился к контроллеру ошибок и отобразил сообщение об ошибке из исключения, которое он поймал.Ошибка диспетчера отправки ZF1 от начальной загрузки
Есть ли способ выбросить исключение в Bootstrap.php в проекте Zend Framework 1 и обработать обработчик ошибок так, как если бы исключение было выброшено из контроллера?
Update: Благодаря Дэвид Вейнрауб я придумал следующее решение.
Bootstrap.php:
protected function _initRegistry()
{
$options = $this->getOptions();
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Application_Plugin_RegistryHandler($options));
}
RegistryHandler.php:
use Application\Service\Config\Config;
use Application\Service\Config\MailConfig;
/**
* Handles the loading of objects and values into the registry, we use a plugin
* so exceptions can be thrown and caught with
* Zend_Controller_Plugin_ErrorHandler.
*/
class Application_Plugin_RegistryHandler extends Zend_Controller_Plugin_Abstract
{
/**
* @var array
*/
private $options;
/**
* @param array $options
*/
public function __construct($options)
{
$this->options = $options;
}
/**
* Load the config classes into registry on route startup
* so the error controller should be loaded and ready to catch exceptions.
*
* @param Zend_Controller_Request_Abstract $request
*/
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$registry = Zend_Registry::getInstance();
$mailConfig = new MailConfig($this->options);
$config = new Config($this->options);
$config->setMailConfig($mailConfig);
$registry->set('config', $config);
}
}
Любые исключения, брошенные здесь перехватываются и обрабатываются с обработчик ошибок и может отображать хорошее сообщение, как «значение настройки" doctrine.conn.database 'отсутствует в local.ini ", затем я использую реестр для доступа к этим значениям конфигурации (менеджер сущностей и почтовый обработчик, которые будут добавлены позже) из любого места приложения.
Мне жаль, что у меня не было права переместить этот проект на Zend Framework 2, с которым гораздо легче работать.