Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2-如何实现前端和后端的视图分离?_Php_Zend Framework2 - Fatal编程技术网

Php Zend Framework 2-如何实现前端和后端的视图分离?

Php Zend Framework 2-如何实现前端和后端的视图分离?,php,zend-framework2,Php,Zend Framework2,我是zf2的初学者,正在尝试进行某种文件夹结构设计,以使其美观且易于管理 我正试图以这样的方式构造我的控制器和视图:后端相关文件位于它们的文件夹中,前端将位于它们的文件夹中。我设法用文件夹和名称空间将我的控制器分开(例如Blog\Controller\Frontend\Blog&Blog\Controller\Backend\Blog),并且我还可以使用配置中的可调用项调用它们。但是,我不能在视图(例如view\blog\frontend\blog&views\blog\backend\blog

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

首先,您可以使用
Blog\Controller\BlogFrontend
Blog\Controller\blogbendend
类。这会让你的生活轻松一点

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

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,blogbend”的想法也很好。我认为这是一个更优雅的解决方案,而不是在每个操作上键入$view->setTemplate('application/backend/blog/index.phtml');问题不在于布局。