Как переопределить / клонировать модули, которые загружаются поставщику композитором в zf2?

ТАК!!!

Я добавил модуль zfcUser (но я хочу сделать это с любым другим модулем тоже) в свой проект на основе Zend Framework 2. *. Как я могу переопределить контроллеры / представления / конфиги этого модуля, поэтому их изменения не будут удалены с обновлением зависимостей с композитором (я пытался сделать это и не нашел файлы, которые были отредактированы, но что, если …. Oo ).

Я знаю, что существует способ сделать это, но я этого не знаю. Просмотреть помощник? Или что?

Помоги мне, пожалуйста! Спасибо.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Текущие папки и файлы ZfcUserOverride:

Текущие папки и файлы 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.