Ответ 1
Не рекомендуется использовать что-либо в каталоге модуля, особенно те модули, которые помещаются в /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 aliasing для переопределения псевдонима 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
в настоящее время находится под рефакторингом для замены singletonStaticEventManager
экземпляромSharedEventManager
, который может быть создан через локаторZend\Di
. Вы можете посмотреть прогресс этого рефакторинга в этот запрос Pull.
Изменение вида или формы рендеринга
По этот 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
, и вы хотите переопределить вид входа script из ZfcUser (расположенный в /vendor/ZfcUser/view/zfcuser/login.phtml
), создайте свое представление script в /modules/MyUser/view/zfcuser/login.phtml
.