我正在寻找ZF2路由器配置的一些帮助。
我想在开发环境中向单个模块添加多个控制器,但最终必须弄清楚如何指定特定路由。
为此,我目前正在尝试使用MVC快速入门文档中指定的通用module.config。但是,这似乎没有像ZF2文档所建议的那样执行。
http://framework.zend.com/manual/2.0/en/modules/zend.mvc.quick-start.html
文档说明:
“ZendSkeletonApplication随附”默认路由“ 让你做这个动作。这条路线基本上是期待 “/ {module} / {controller} / {action}”,允许您指定: “/ Zend的用户/你好/世界”。我们主要在这里创建一条路线 为了便于说明,因为创建显式路由是一个 推荐的做法。“
然而,控制器呈现/房东, / landlord / home / index,但不是/ landlord / sandbox / index。家庭和沙箱是控制器。 Sandbox的命名遵循命名约定“SandboxController”。我的看法是,文档中代码的child_routes部分可能需要我错过的某种修改。
在沙箱实例中,我在404错误页面上收到此错误。
Landlord \ Controller \ Sandbox(解析为无效的控制器类或 别名:Landlord \ Controller \ Sandbox)
我尝试添加'Landlord \ Controller \ Sandbox'=> 'Landlord \ Controller \ SandboxController',对于invokables,但这会产生错误。
我的控制器如下:
return array(
'controllers' => array(
'invokables' => array(
'Landlord\Controller\Home' => 'Landlord\Controller\HomeController',
),
),
'router' => array(
'routes' => array(
'landlord' => array(
'type' => 'Literal',
'options' => array(
// Change this to something specific to your module
'route' => '/landlord',
'defaults' => array(
// Change this value to reflect the namespace in which
// the controllers for your module are found
'__NAMESPACE__' => 'Landlord\Controller',
'controller' => 'home',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This route is a sane default when developing a module;
// as you solidify the routes for your module, however,
// you may want to remove it and replace it with more
// specific routes.
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'landlord' => __DIR__ . '/../view',
),
),
);
如果有一种简单的方法来直接配置网址,这也很有用,或者一个非常好的教程,这也是值得赞赏的。
答案 0 :(得分:25)
这里的问题是,即使路由器尝试路由到您添加的新控制器,您仍然需要为您添加的每个控制器添加Invokable部分。所以你的路由器在这一点似乎很好,但如果你添加一个新的AboutController,那么你需要修改配置的顶部,如此......
return array(
'controllers' => array(
'invokables' => array(
'Landlord\Controller\Home' => 'Landlord\Controller\HomeController',
'Landlord\Controller\About' => 'Landlord\Controller\AboutController',
),
),
答案 1 :(得分:3)
找到答案......发布在这里,它可能对某些人有所帮助...... 我假设您已经按照zf2 docs提供的相册模块示例,现在添加新模块,例如在我的案例'Admin'中,我添加了新的控制器,如admin,news等,
这是路由器设置......
'router' => array(
'routes' => array(
'admin' => array(
'type' => 'segment',
'options' => array(
'route' => '/admin/admin[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Admin\Controller\Admin',
'action' => 'index',
),
),
),
'news' => array(
'type' => 'segment',
'options' => array(
'route' => '/admin/news[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Admin\Controller\News',
'action' => 'index',
),
),
),
),
),
在这里添加你的控制器..
'controllers' => array(
'invokables' => array(
'Admin\Controller\News' => 'Admin\Controller\NewsController',
'Admin\Controller\Admin' => 'Admin\Controller\AdminController',
),
),
现在您可以在模块中调用控制器,就像我的情况一样
localhost/{foldername}/admin/news/index and localhost/{foldername}/admin/admin/index
由于
答案 2 :(得分:1)
我遇到了同样的情况,我找到了上一篇文章的解决方案,但我认为这不是更好的方法。
为了在我的路由器中添加le“clientController”:
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Fcm\Controller\Index',
'action' => 'index',
),
),
),
'client' => array(
'type' => 'Segment',
'options' => array(
'route' => '/client[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Fcm\Controller\Client',
'action' => 'index',
),
),
),
),
),
答案 3 :(得分:0)
像这样配置路由: -
模块: - 用户
控制器: - IndexController
'router' => array(
'routes' => array(
'users' => array(
'type' => 'Literal',
'options' => array(
// Change this to something specific toyour module
'route' => '/users',
'defaults' => array(
// Change this value to reflect the namespace in which
// the controllers for your module are found
'__NAMESPACE__' => 'Users\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' =>
'/[:controller[/:action][/:id]]',
'constraints' => array(
'controller' =>'[a-zA-Z][a-zA-Z0-9_-]*',
'action' =>'[a-zA-Z][a-zA-Z0-9_-]*',
'id' =>'[0-9]+',
),
'defaults' => array(
),
),
),
),
),
),
),