2013-03-03 3 views
2

У меня есть класс начальной загрузки, который я хочу использовать для установки переменных CSS:ошибка зависимости Круговой ресурс в Zend

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initView() 
    { 
     $this->bootstrap('view'); 
     ... 
     ... 
    } 
} 

Но пытаюсь получить вид ресурс терпит неудачу на bootstrap('view') этапе. Я получаю сообщение об ошибке:

... Circular resource dependency detected' in C:\ZendFramework\library\Zend\Application\Bootstrap\BootstrapAbstract.php on line 662 
... 

Это странно, потому что это процедура, которую используют учебные пособия (и документация по zend). Что может быть неправильным?

ответ

3

Измените метод на что-то вроде _initViewStuff() и все будет хорошо.

Причина заключается в том, что последовательность начальной загрузки в Zend_Application_Bootstrap_BootstrapAbstract выглядит следующим образом:

  1. Ваш первоначальный вызов $app->bootstrap() в public/index.php пробегает все _initXxx() методы (@see Zend_Application_Bootstrap_BootstrapAbstract::getClassResourceNames()) и вызывает $this->bootstrap('xxx') для каждого Xxx он находит. Затем он будет делать аналогичную вещь для всех ресурсов плагина, определенных resources.* ключами в application.ini (хотя ваш никогда не будет так далеко, как описано ниже).

  2. Звонок в bootstrap('view') внутренне хранит флаг, что он начал процесс для загрузки ресурса с именем view.

  3. Он делает аналогичную вещь, как (1), ищет подходящий метод _initXxx(). Он находит это и пытается выполнить $this->_initView()

  4. Он отмечает установленный флаг, указывая, что он собирается нанести бесконечный цикл, поэтому он выручает с исключением круговой зависимости.

Как правило, для каждого ресурса xxx, вы самонастройки его с помощью одного (но не оба, как вы обнаружили) из следующих подходов:

  1. Определить _initXxx() метод.

  2. Создание класса плагин ресурса под названием что-то вроде My_Application_Resource_Xxx (вы сообщить, что система, которая My_Application_Resource_ является префиксом пространства имен для плагинов ресурсов с использованием pluginPaths.My_Application_Resource = /path/to/dir/containing/plugin в application/configs/application.ini)

+0

20 sec difference :) –

+0

Да, вы избили меня до него. Служит мне правильно, чтобы быть таким многословным. ;-) –

+0

спасибо. Работает отлично. + @ b.b3rn4rd. Могли бы вы, ребята, помочь с некоторыми вводами в [этой теме] (http://stackoverflow.com/questions/15132691/do-i-set-my-zend-baseurl-manually). благодаря –

2

Вы не можете использовать это имя методы в вашем классе начальной загрузки «_initView», потому что есть соответствующая Zend_Application_Resource_View, просто переименовать вашей самозагрузку имени метода

+1

Там нет никаких проблем, имеющих метод инициализации, который совпадает с именем из встроенного класса ресурсов вы просто не можете вызывать '$ this-> bootstrap ('foo')' где 'foo' соответствует имени метода, в котором вы находитесь, и это вызывает циклическую зависимость. –

+0

Привет @TimFountain У меня только есть шанс проверить это, спасибо за разъяснение. –

Смежные вопросы