【问题标题】:Zend Framework 2 - How make views separation for frontend and backend?Zend Framework 2 - 如何使前端和后端的视图分离?
【发布时间】:2015-03-15 20:17:11
【问题描述】:

我是 zf2 的初学者,正在尝试进行某种文件夹结构,以使它们变得美观且易于管理。

我正在尝试以后端相关文件位于其文件夹中而前端将位于其文件夹中的方式构造我的控制器和视图。我设法将我的控制器与文件夹分开并对它们进行命名空间(例如 Blog\Controller\Frontend\Blog 和 Blog\Controller\Backend\Blog),我也可以使用配置中的可调用对象来调用它们。但是我不能在视图中做同样的事情(例如 view\blog\frontend\blog & views\blog\backend\blog),因为它只在views\blog\blog 文件夹中查看。

任何人都可以帮助我如何修复它,以便我的视图可以在每一端都有一些文件夹分隔?

我的 module.config.php 如下所示:

<?php namespace Blog;

return [
    'controllers' => [
        'invokables' => [
            // 'Blog\Controller\Blog' => 'Blog\Controller\BlogController',
            'Blog\Controller\Frontend\Blog' => 'Blog\Controller\Frontend\BlogController',
            'Blog\Controller\Backend\Blog' => 'Blog\Controller\Backend\BlogController',
        ],
    ],

    'router' => [
        'routes' => [
            'blog' => [
                'type'    => 'segment',
                'options' => [
                    'route'    => '/blog/blog[/:action][/:id]',
                    'constraints' => [
                        // 'controller' => 'Blog\Controller\Blog',
                        'controller' => 'Blog\Controller\Frontend\Blog',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'         => '[0-9]+',
                    ],
                    'defaults' => [
                        // 'controller' => 'Blog\Controller\Blog',
                        'controller' => 'Blog\Controller\Frontend\Blog',
                        'action'     => 'index',
                    ],
                ],
            ],
        ],
    ],

    'view_manager' => [
        'template_path_stack' => [
            'blog' => __DIR__ . '/../view',
        ],
    ],

    // Doctrine config
    'doctrine' => [
        'driver' => [
            __NAMESPACE__ . '_driver' => [
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => [
                    __DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
                ],
            ],
            'orm_default' => [
                'drivers' => [
                    __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
                ],
            ],
        ],
    ],
];

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    首先,您可以使用 Blog\Controller\BlogFrontendBlog\Controller\BlogBackend 课程。它会让你的生活更轻松一些。

    如果出于某种原因不想重命名它们,可以手动设置渲染模板:

    class IndexController extends AbstractActionController
    {
        public function indexAction()
        {
            $view = new ViewModel();
            $view->setTemplate ('application/frontend/blog/index.phtml');
            return $view;
        }
    }
    

    在管理控制器中

    class IndexController extends AbstractActionController
    {
        public function indexAction()
        {
            $view = new ViewModel();
            $view->setTemplate ('application/backend/blog/index.phtml');
            return $view;
        }
    }
    

    【讨论】:

    • 工作。这很棒。谢谢。我有点喜欢在一个地方看到我的后端文件,而在另一个地方看到前端文件,这就是我想要这样的东西的原因。你给出的“BlogFrontend,BlogBackend”的想法也不错。
    • 我认为这可能是一个更优雅的解决方案 github.com/EvanDotPro/EdpModuleLayouts 而不是在每个操作上键入 $view->setTemplate ('application/backend/blog/index.phtml');
    • 问题不在于布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2016-07-02
    相关资源
    最近更新 更多