Изменение маршрутов
По умолчанию модуль использует маршрут user. Мы хотим поменять на account.Важно!!! Наш модуль регистрируется после стандартного модуля.
В таком случае настройки подхватываются последовательно и мы можем перекрыть стандартные настройки модуля ZfcUser в файле настроек нашего модуля.
return array( ... // Перекрываем маршрут zfcuser 'router' => array( 'routes' => array( 'zfcuser' => array( 'options' => array( 'route' => '/account', ), ), ), ), );
Изменение скриптов вида
Каталог скриптов вида стандартного модуля называется 'zfc-user'.Например, шаблон с формой регистрации будет 'view/zfc-user/user/register.phtml'.
Все что нам нужно, это просто создать альтернативный шаблон в нашем модуле с аналогичным путем и убедится, что шаблоны нашего модуля подхватываются уровнем вида приложения.
Для этого в настройках модуля должно быть следующее:
return array( ... // Указываем менеджеру вида путь к шаблонам в нашем модуле 'view_manager' => array( 'template_path_stack' => array( 'application' => __DIR__ . '/../view', ), ), );
Изменение формы
ZfcUser генерирует событие после выполнения метода init, то есть после создания формы со всеми элементами. Событие так и называется 'init' а идентификатор 'ZfcUser\Form\Register'.Таким образом, если мы хотим, например, добавить чекбокс в форму, то у нас есть такая возможность. Мы должны использовать слушатель события 'init'. Нам нужно создать слушатель в классе нашего модуля. Класс модуля должен реализовавать интерфейс 'Zend\ModuleManager\Feature\BootstrapListenerInterface'в котором есть метод onBootstrap.
... use Zend\ModuleManager\Feature\BootstrapListenerInterface; ... class Module implements BootstrapListenerInterface { ... public function onBootstrap(Event $e){ $app = $e->getParam('application'); // $em объект Zend\EventManager\SharedEventManager $em = $app->getEventManager()->getSharedManager(); $em->attach('ZfcUser\Form\Register', 'init', function($e) { // $form объект ZfcUser\Form\Register $form = $e->getTarget(); $form->add(array( 'name' => 'accept', 'options' => array( 'label' => 'Accept Terms of Use', ), 'attributes' => array( 'type' => 'checkbox' ), )); }); } ... }Похожий вариант с ZfcUser\Form\RegisterFilter, котoрый тоже генерирует событие init:
public function onBootstrap(Event $e){ $app = $e->getParam('application'); // $em объект Zend\EventManager\SharedEventManager $em = $app->getEventManager()->getSharedManager(); $em->attach('ZfcUser\Form\Register', 'init', function($e) { // $form объект ZfcUser\Form\Register $form = $e->getTarget(); $form->add(array( 'name' => 'accept', 'options' => array( 'label' => 'Accept Terms of Use', ), 'attributes' => array( 'type' => 'checkbox' ), )); }); }К сожалению, далеко не все модули используют EventManager для оповещения о событиях ;-(
В таком случае этот подход не будет работать.
Комментариев нет:
Отправить комментарий