ТАК!!!
Я добавил модуль zfcUser
(но я хочу сделать это с любым другим модулем тоже) в свой проект на основе Zend Framework 2. *. Как я могу переопределить контроллеры / представления / конфиги этого модуля, поэтому их изменения не будут удалены с обновлением зависимостей с композитором (я пытался сделать это и не нашел файлы, которые были отредактированы, но что, если …. Oo ).
Я знаю, что существует способ сделать это, но я этого не знаю. Просмотреть помощник? Или что?
Помоги мне, пожалуйста! Спасибо.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Текущие папки и файлы ZfcUserOverride:
давайте ответим на все ваши вопросы один за другим.
Но прежде чем будем иметь в виду, что ModuleManager создает «конфигурацию приложения», объединяющую все конфигурации сервисных модулей (имя файла по умолчанию – config / module.config.php в каждом модуле) всех зарегистрированных модулей (ключ «модулей» в вашем приложении. config.php), начиная с первого и последнего: это означает, что последний «выигрывает».
Чтобы сделать практический пример, если у вас есть ключ конфигурации «XYZ» в модуле «A», чтобы переопределить его значения в модуле «B», модуль «B» должен быть зарегистрирован после «A».
Предполагая, что вы хотите переопределить конфигурации ZfcUser в своем прикладном модуле, последний должен быть зарегистрирован после первого.
'modules' => array( 'ZfcUser', 'Application', ),
1) Как переопределить только сценарии просмотра?
Как уже упоминалось, вы должны создать настраиваемый модуль (я предлагаю вам использовать zftool для создания новых проектов и модулей), которые содержат ваши переопределенные скрипты пользовательского представления внутри папки views / {имя модуля} (views / zfc-user для модуля ZfcUser ). Проще попробуйте создать файл module / {module-name} /view/zfc-user/user/login.phtml с чем-либо внутри него, посетить URL-адрес / user / login: вы должны увидеть свой переопределенный сценарий просмотра.
2) Как я могу переопределить контроллер?
Контроллеры регистрируются как службы, если вы видите конфигурацию модуля ZfcUser, вы можете найти
'controllers' => array( 'invokables' => array( 'zfcuser' => 'ZfcUser\Controller\UserController', ), ),
Ключ «zfcuser» можно использовать в конфигурации маршрута
'defaults' => array( 'controller' => 'zfcuser', // this refers to the controller service 'action' => 'index', ),
В модуле ZfcUser пользовательский контроллер, правила маршрутизации и template_path_stack имеют одно и то же имя «zfcuser», и на первый взгляд это может сбивать с толку, просто имейте в виду, что они относятся к различным службам (представление, контроллер и конфигурация маршрута).
Чтобы заставить приложение использовать ваш пользовательский контроллер вместо UserController ZfcUser, вам нужно только переопределить службу контроллеров в вашем настраиваемом модуле, например follow (для этого примера я использовал модуль приложения)
'controllers' => array( 'invokables' => array( 'zfcuser' => 'Application\Controller\UserController', ), ),
Ваш «Application \ Controller \ UserController» может расширить исходный контроллер, чтобы сохранить исходную функциональность (возможно, вам нужно отредактировать только несколько методов).
3) Как я могу переопределить конфигурацию?
Если для «config» вы имеете в виду, что конфиг службы просто выполняет ту же работу, что и в пункте 2: возьмите ключ конфигурации и измените его значение.
ZfcUser – настраиваемый модуль, это означает, что есть значения, любые значения, которые не обязательно являются сервисами, которые могут быть настроены. Взгляните на файл config / zfcuser.global.php.dist: этот файл, переименованный без суффикса .dist, может быть включен в ваш каталог {Application} / config / autoload, и структура автоматически загрузит его содержимое (которое будет настраиваться модуль). Например, вы можете настроить, какие поля являются личными, использовать или не отслеживать, проезжать после входа и так далее …
Я не буду здесь объяснять, как создать настраиваемый модуль, есть много учебников о том, как это сделать.
Надеюсь, я ничего не ошибся и что я ответил на все вопросы, если у вас есть проблема, просто ответьте 🙂
ура
Лучший способ сделать это – создать собственный модуль, чтобы переопределить все, что вы хотите переопределить. Взгляды просты, просто добавьте подпапку под названием zfc-user в папку просмотра вашего модуля с пользователем вложенной папки, так что вы получите YourModule / view / zfc-user / user. В этой папке пользовательских представлений вы можете просто добавить свои собственные версии ZfcUser шаблоны: login.phtml, register.phtml и т. д.
Для этого убедитесь, что ваш модуль загружен после ZfcUser. Поэтому в вашем config / application.config.php убедитесь, что ваш модуль появился после ZfcUser в массиве 'modules'.
Чтобы переопределить контроллеры, просто определите свой собственный UserController в своем собственном модуле, либо расширив UserController ZfcUsers, либо определив свой собственный. Затем проложите маршрут, чтобы заботиться обо всем остальном. Поэтому в модуле module.config.php от YourModule создайте маршруты, указывающие на собственный UserController.
Редактировать Добавьте свой пользовательский UserController в свой модуль ZfcUserOverride. Затем добавьте его к этому модулю module.config.php в конфигурацию диспетчера служб и добавьте его в zfcuser, который использует имя ZfcUser.
'controllers' => array( 'invokables' => array( 'zfcuser' => 'ZfcUserOverride\Controller\UserController', ), ),
Edit 2: Также не забудьте добавить это в свой module.config.php:
'view_manager' => array( 'template_path_stack' => array( 'zfcuser' => __DIR__ . '/../view', ), ),
Это необходимо, если вы переопределяете сценарии представления ZfcUser.