Вопрос по zend-framework-modules, zend-framework2, zend-framework, php – Другой файл макета для другого контроллера

3

Как заставить мой модуль ZF2 загружать другой файл макета для конкретного контроллера?

Считайте, что у вас естьIndexController а такжеAdminController в вашем прикладном модуле ZF2 иIndexController используетlayout.phtml но вы хотите использоватьadminlayout.phtml заAdminController.

Как это возможно?

Ваш Ответ

3   ответа
1

'view_manager' => array(
        'template_path_stack' => array(
            'YOURMODULENAME' => __DIR__ . '/../view',
        ),

        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
        ),
    ),

менятьYOURMODULENAME к вашему модулю конкретное имя

Я пытаюсь это, но это не работает, это действительно не заботится о "макете / макете"
Вы должны подтвердить, что маршрутизатор направляет к вам дополнительный модуль для загрузки и отправки ... пожалуйста, загрузите ваш код куда-нибудь Sina Miandashti
0

onBootstrap метод, вы можете использовать свой контроллерonDispatch метод, чтобы просто установить макет для всего этого контроллера.

В вашем административном контроллере добавьте ярлык вверху:

use Zend\Mvc\MvcEvent;

Затем используйте следующееonDispatch в вашем контроллере:

public function onDispatch(MvcEvent $mvcEvent)
{   
    $this->layout()->setTemplate('layout/admin');

    return parent::onDispatch($mvcEvent);
}

Я считаю, что это решение лучше, потому что код вызывается только при вызове администратора.

7
class Module {
    public function onBootstrap($e) {
        $em  = $application->getEventManager();

        $em->attach(MvcEvent::EVENT_DISPATCH, function($e) {
            $controller = $e->getTarget();
            if ($controller instanceof Controller\AdminController) {   
                $controller->layout('layout/layoutadmin.phtml');
            } else {
                $controller->layout('layout/layout.phtml');
            }   
        });
    }
}

добавив эту конфигурацию в файл конфигурации вашего модуля:

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
        'Application\Controller\Admin' => 'Application\Controller\AdminController',
    ),
),
в контроллере init? Sina Miandashti
может быть, хорошо использовать модуль для индекса, а затем модуль для администратора Sina Miandashti
Просто мысль для тех, кто может это прочитать. Если вы считаете, что вам нужны разные макеты, возможно, в вашей архитектуре есть что-то, что можно улучшить. Обычно вам нужен только один макет. Если вам нужны два макета, возможно, у вас должно быть два отдельных приложения (или две отдельные точки входа). Или, может быть, вам нужно более вдумчиво использовать новую модель модели вложенного представления ZF2 ... просто мысли.
@superdweebie Я не согласен. Приложение может иметь как интерфейс, так и администратор, которые могут выглядеть совершенно по-разному и могут требовать разных макетов. Или как насчет страниц аутентификации - & gt; Это также может потребовать другой макет. Таким образом, вполне вероятно, что 2 контроллера нуждаются в разной компоновке.
Я исправил вашу разметку. Предоставление объяснения и плюсов / минусов этого решения значительно улучшит этот ответ. (Например, почему или почему бы не сделать это вместо того, чтобы вручную указывать макет в контроллере?)

Похожие вопросы