Не рекомендуется изменять что-либо в каталоге модуля, особенно те модули, которые помещены в /vendor/
. Это также причина, по которой шаблоны конфигурации должны быть скопированы в ваш собственный каталог /config/autoload/
.
Модуль должен обеспечивать достаточные точки расширения, чтобы сделать его достаточно гибким для вашего использования. Среди этих возможностей следующие опции:
Изменить маршрут
Модуль ZfcUser регистрируется под / user url. Если вы хотите изменить это, например, на / 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
as 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
.