Intereting Posts
Libreoffice –headless отказывается конвертировать, если не root, не будет работать с PHP-скриптом Если вы создаете переменную внутри оператора if, она доступна вне инструкции if? Laravel Request :: all () не следует называть статически Отправка значения на страницу с помощью AJAX, действие формы не работает Анализ SOAP-ответа Есть ли лучшая практика только для частичной интеграции фреймворка PHP в подкаталог веб-сайта? CakePHP: пользовательская отчетность об ошибках в командах консоли Каков наилучший способ слияния двух объектов PHP? Как организовать и управлять ACL? Laravel 4: Заголовок разбивки и сортировки pagination не ссылается на предложение where при нажатии новой страницы Nginx или PHP FPM игнорирует memory_limit в php.ini Ошибка Query_builder Symfony form builder Каков наилучший способ убедиться, что два человека не редактируют одну и ту же строку в моем веб-приложении? Алгоритм естественной сортировки в PHP с поддержкой Unicode?

Как получить контроллер из плагина контроллера в zendframework 2?

Я пишу плагин контроллера в zf2. Я использую следующий метод для получения контроллера из плагина, но он возвращает null.

$controller = $this->getController() 

Любое предложение?

Есть два варианта, для которых у вас нет контроллера, установленного в вашем плагине.

  1. Вы вызываете плагин из диспетчера плагинов перед отправкой, поэтому контроллер еще не установлен
  2. Вы вызываете контроллер внутри плагина во время __construct()

Для первого примера типичным примером является метод onBootstrap() в классе модуля, где, очевидно, у вас нет контроллера:

 public function onBootstrap($e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $plugins = $sm->get('ControllerPluginManager'); $plugin = $plugins->get('my-plugin'); // $plugin->getController() === null } 

Это кажется очевидным примером, но есть и другие случаи, когда вы ошибочно предполагаете, что контроллер уже существует (например, во время запуска приложения на фазе маршрута, отправка еще должна прибыть).

Второй пример – это то, что контроллеру вводят инъекцию сеттера. Избиратель вызывается после построения. В псевдокоде это происходит:

 $plugin = new $class; $plugin->setController($controller); 

Если у вас есть такой плагин:

 use Zend\Mvc\Controller\Plugin\AbstractPlugin; class MyPlugin extends AbstractPlugin { public function __construct() { // $this->getController() === null } } 

Вы заметили, что на этой фазе нет контроллера.

Обратите внимание: этот ответ основывался на моем опыте работы с ZF1 и быстро просмотре кода ZF2. Проверьте этот ответ .

Я еще не играл с ZF2, но если процесс отправки и плагины похожи на ZF1, плагин не может получить доступ к контроллеру (по крайней мере, не тривиально), поскольку контроллер даже не создан для некоторых из плагины.

Обновление : взглянул на некоторые из плагинов контроллера ZF2 (поскольку я не могу найти официальные документы о создании настраиваемого плагина) и вижу такие проверки, как :

 $controller = $this->getController(); if (!$controller || !method_exists($controller, 'plugin')) { //... 

Таким образом, кажется, что в некоторых случаях контроллер не может быть установлен. Поскольку плагины поддерживают (то, что я понимаю) слушателя событий, я предполагаю, что они все еще могут использоваться в разное время в процессе ответа, который может быть до назначения контроллера.

Надеюсь, кто-то, кто использовал ZF2, может прийти и установить меня прямо ; но, возможно, я, по крайней мере, указал вам в несколько разумном направлении.