Я пишу плагин контроллера в zf2. Я использую следующий метод для получения контроллера из плагина, но он возвращает null.
$controller = $this->getController()
Любое предложение?
Есть два варианта, для которых у вас нет контроллера, установленного в вашем плагине.
__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, может прийти и установить меня прямо ; но, возможно, я, по крайней мере, указал вам в несколько разумном направлении.