предотвратить объединение двух конфигураций модуля в Zend Framework 2

У меня есть два модуля в моем приложении ZF2, оба модуля имеют разную конфигурацию для себя, и оба модуля имеют разные Module.php с различными настройками внутри него.


У меня есть логин для Admin, который определен в Module.php, как показано ниже: inBootstrap funtion:

public function onBootstrap($e) { $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { $controller = $e->getTarget(); $controllerClass = get_class($controller); $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); if ('Admin' === $moduleNamespace) { $controller->layout('layout/admin'); } }, 100); $application = $e->getApplication(); $eventManager = $application->getEventManager(); .......... .......... $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'boforeDispatch'), 100); } 

функция boforeDispatch, которая вызывается внутри onBootstrap для проверки процесса входа в систему

 function boforeDispatch(MvcEvent $event) { ...... //did something ...... } 

Всякий раз, когда я собираюсь запустить Front-модуль, функция Admin-модуля beforeDispatch запущена. Я также попытался определить другую функцию внутри модуля Front без содержимого внутри, чтобы он не мог объединить его.


2

Я написал несколько 404 шаблонов для обоих модулей, но работает шаблон Front. Вот код .:

 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( 'layout/front' => __DIR__ . '/../view/layout/layout.phtml', 'front/index/index' => __DIR__ . '/../view/front/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ), 'template_path_stack' => array( __DIR__ . '/../view', ), ), 

оба файла находятся в папке с той же структурой. В: Как предотвратить слияние конфигурации одного модуля с другим?

Solutions Collecting From Web of "предотвратить объединение двух конфигураций модуля в Zend Framework 2"

Вы не должны препятствовать слиянию. Аналогичная проблема связана с загрузкой разного макета для 2 модулей – посмотрите https://stackoverflow.com/a/11921330/949273

К сожалению, ваша проблема несколько противоречива, потому что, если у вас есть страница 404, нет способа узнать, что это за модуль – из-за этого он называется 404 страницей не найден .

В любом случае вы можете отправить событие MvcEvent :: EVENT_DISPATCH_ERROR и проверить с помощью URL регулярного выражения и установить другой файл представления.

Пример кода

в конфигурации вашего администратора

 'template_map' => array( 'error-admin/404' => __DIR__ . '/../view/error/404.phtml', ), 

чем на EVENT_DISPATCH_ERROR, введите свою логику

 public function onBootstrap(MvcEvent $e) { $app = $e->getTarget(); $em = $app->getEventManager(); $em->attach(MvcEvent::EVENT_DISPATCH_ERROR, function (\Zend\Mvc\MvcEvent $e) { $app = $e->getParam('application'); $uri = $app->getRequest()->getUri()->getPath(); if(strpos($uri, '/admin') === 0){ $view = new \Zend\View\Model\ViewModel(); $view->setTemplate('error-admin/404'); $e->setViewModel($view); } }); } 

После многих поисков я получил решение своего вопроса. Основная проблема заключалась в получении имени модуля. вот мой код. Я сгенерировал его с помощью MvcEvent::getRouteMatch()->getParam()

 function boforeDispatch(MvcEvent $event) { $controller = $event->getRouteMatch()->getParam('controller'); $request_module = substr($controller, 0, strpos($controller, '\\')); if ($request_module == __NAMESPACE__) { //do stuff } }