Не рекомендуется изменять что-либо в каталоге модуля, особенно те модули, которые помещены в /vendor/
. Это также причина, по которой шаблоны конфигурации должны быть скопированы в ваш собственный каталог /config/autoload/
.
Модуль должен предоставлять достаточно точек расширения, чтобы сделать его достаточно гибким для вашего использования. Среди этих возможностей следующие варианты:
Изменить маршрут
Модуль ZfcUser регистрируется под URL-адресом /user. Если вы хотите изменить это, например, на /account, вы можете просто добавить это в свою конфигурацию:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'zfcuser' => array(
'options' => array(
'route' => '/account',
),
),
),
),
),
),
),
);
Сменить контроллер
Если вас не устраивает использование ZfcUser\Controller\UserController
и вы хотите переопределить какое-либо действие в этом контроллере, вы можете создать собственный контроллер, например MyUser\Controller\UserController
. Если вы расширите ZfcUser\Controller\UserController
и предоставите эту конфигурацию, вы готовы к работе:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'zfcuser' => array(
'options' => array(
'defaults' => array(
'controller' => 'MyUser\Controller\UserController'
),
),
),
),
),
),
),
),
);
Вы также можете использовать псевдоним DI, чтобы переопределить псевдоним zfcuser
в вашей конфигурации DI:
<?php
return array(
'di' => array(
'instance' => array(
'alias' => array(
'zfcuser' => 'MyUser\Controller\UserController'
),
),
),
);
Изменить экземпляр формы
Например, модуль ZfcUser запускает несколько событий, чтобы помочь другим модулям подключиться к процессу создания формы. И ZfcUser\Form\Login
, и ZfcUser\Form\Register
вызывают событие init
после настройки всех элементов формы. Это дает вам возможность добавлять или удалять элементы.
use Zend\EventManager\StaticEventManager;
$events = StaticEventManager::getInstance();
$events->attach('ZfcUser\Form\Login', 'init', function ($e) {
$form = $e->getTarget();
$form->addElement('text', 'something-new');
});
Здесь я должен сделать два замечания:
- Каждый модуль должен предоставлять свои собственные триггеры. Этот ZfcUser имеет
init
в обеих формах, но это не для каждого модуля. Вы должны изучить документацию или исходный код, чтобы узнать об этом.
- В настоящее время
Zend\EventManager
находится в стадии рефакторинга, чтобы заменить одиночный элемент StaticEventManager
экземпляром SharedEventManager
, экземпляр которого можно создать с помощью локатора Zend\Di
. Вы можете наблюдать за ходом рефакторинга в этом запросе на включение.
Изменение отображения представления или формы
В соответствии с этим документом RFC компонент Zend\Form
может измениться. Специально для рендеринга декораторы будут удалены, и вместо них будут рендерить форму «просто» обычные помощники представления. Учитывая это, а также возможность переопределения представлений, очень легко изменить рендеринг действия, просто используя другой модуль только с некоторыми сценариями представления.
Если вы создаете свой собственный модуль и предоставляете эту конфигурацию, вы добавляете новое местоположение в стек путей шаблона:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\View\Resolver\TemplatePathStack' => array(
'parameters' => array(
'paths' => array(
'myuser' => __DIR__ . '/../view',
),
),
),
),
),
);
Теперь вы можете создавать сценарии представления в каталоге view
вашего модуля. Если у вас есть модуль с именем «MyUser» и расположенный в /modules/MyUser
, и вы хотите переопределить сценарий входа в систему из ZfcUser (находится в /vendor/ZfcUser/view/zfcuser/login.phtml
, создайте свой сценарий просмотра в /modules/MyUser/view/zfcuser/login.phtml
.
person
Jurian Sluiman
schedule
21.03.2012