Zend Framework 2 - 如何分离前端和后端的视图?
Zend Framework 2 - How make views separation for frontend and backend?
我是 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\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;
}
}
我是 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\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;
}
}