php - Zend Framework 2 - 如何使前端和后端的 View 分离?

标签 php zend-framework2

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

我正在尝试以这样的方式构建我的 Controller 和 View ,即后端相关文件位于其文件夹中,前端相关文件位于其文件夹中。我设法用文件夹和命名空间分隔 Controller (例如 Blog\Controller\Frontend\Blog 和 Blog\Controller\Backend\Blog),并且我也可以使用配置中的可调用来调用它们。但是,我无法在 View 中执行相同的操作(例如 view\blog\frontend\blog 和views\blog\backend\blog),因为它仅在views\blog\blog 文件夹中查找。

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

我的 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'
                ],
            ],
        ],
    ],
];

最佳答案

首先,您可以使用 Blog\Controller\BlogFrontendBlog\Controller\BlogBackend 类。这会让你的生活变得更轻松一些。

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

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

在管理 Controller 中

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

关于php - Zend Framework 2 - 如何使前端和后端的 View 分离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29059148/

相关文章:

php - 'xxx' 中的未知列 'where clause'

javascript - 从 PHP 文件发回消息

php - 如何使用PHP检查我们的电子邮件是否已在网络邮件中阅读

php - Zend Framework 2 过滤/验证内容数组

php - 如何使用骨架项目 'Application' 模块中的错误处理程序来捕获事件回调中的错误?

unit-testing - Zend Framework 2 使用 CodeCeption 进行单元测试

zend-framework2 - 如何使用 Zend Framework 2 中的安全功能?

javascript - htmlspecialchars_decode 导致宽度问题

php - 自定义 Zend Framework 2 电子邮件字段验证器错误消息

php - 比较 php 中的时间与 mysql 时间没有给出正确的结果