Zend Framework Проблема начальной загрузки - PullRequest
3 голосов
/ 06 июня 2011

Я уже некоторое время работаю над новой установкой приложения Zend Framework, и я не могу понять, что происходит.У меня есть два помощника для пользовательских действий, которые я хотел бы использовать, и я хотел бы инициализировать их в загрузчике.Но кажется, что мои _init-функции вообще не вызываются.В index.php, который запускает приложение, которое у меня есть:

require('Zend/Application.php');

$app = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH 
.'/configs/application.ini');

$app->bootstrap()->run();

Вот что у меня есть в файле application.ini:

[production]

appnamespace = "Application_Name"

includePaths.library = APPLICATION_PATH "/../library"

bootstrap.path = "/home/user/website/includes/library/Application_Name/Resource/Bootstrap.php"

bootstrap.class = "Bootstrap"

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

resources.view[] =

autoloaderNamespaces[] = "Application_Name"

pluginPaths.Application_Name_Resource = "Application_Name/Resource"

Я знаю, что приложение несколько работает, потому что оноиспользует макет, который у меня есть, и я могу делать что-то в контроллерах и представлениях и выводить его на страницу.Я также знаю, что он по крайней мере смотрит на файл Bootstrap, потому что я могу сделать ошибку PHP, когда я опускаю конечную фигурную скобку.

Вот часть моего файла Bootstrap:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

        public function _init()
        {
                Zend_Controller_Action_HelperBroker::addPrefix(new Application_Name_Controller_Action_Helper_ResourceInjector());
                Zend_Controller_Action_HelperBroker::addPrefix(new Application_Name_Controller_Action_Helper_Em());
        }

Есть какие-нибудь идеи, почему это может быть или увидеть что-то, что я испортил в моей конфигурации?Я посмотрел десятки учебных пособий по настройке Zend, и, похоже, ни у кого больше нет этой проблемы.

1 Ответ

3 голосов
/ 06 июня 2011

Вы неправильно используете вспомогательный брокер.addPrefix() используется для добавления префиксных путей pluginloader, а не реальных классов.

Если вы хотите добавить конкретных помощников (предположительно, для использования их диспетчерских хуков), то поместите что-то подобное в свой класс Bootstrap

protected function _initActionHelpers()
{
    $helper = new My_Helper;
    Zend_Controller_Action_HelperBroker::addHelper($helper);
}

Для обычных помощников времени выполнения вы можете легко добавить префиксные пути в вашу конфигурацию, например,

resources.frontController.actionHelperPaths.ProEquipTrack_Controller_Action_Helper = "ProEquipTrack/Controller/Action/Helper"

Они будут автоматически загружены брокером во время вызова, например (контекст контроллера)

$resourceInjector = $this->getHelper('ResourceInjector');
$em = $this->getHelper('Em');

или с использованием шаблона стратегии (direct() метод)

$this->_helper->resourceInjector($arg1, $arg2 /*, etc */);

Doctrine Entity Manager

Сделайте что-то подобное в своем классе Bootstrap

protected function _initDoctrine()
{
    // initialise and create entity manager
    $em = // whatever

    return $em;
}

Теперь вы можете получить доступ к диспетчеру сущностей в ваших контроллерах, используя этот

$em = $this->getInvokeArg('bootstrap')
           ->getResource('doctrine');
...