我刚刚开始学习ZF2,所以如果问题很简单,我会道歉。 我想要实现的是将用户从projectname.loc:8888 / user重定向到projectname.loc:8888 / user / login 如果我手动输入projectname.loc:8888 / user / login,则表单显示没有任何问题。如果我输入projectname.loc:8888 / user,则会收到以下错误消息:找不到名称为“login”的路由。
路由设置为modul.config.php:
'user' => array(
'type' => 'Literal',
'options' => array(
'route' => '/user',
'defaults' => array(
'__NAMESPACE__' => 'TAuth\Controller',
'controller' => 'User',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'process' => 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(
),
),
),
),
),
UserController.php:
public function indexAction() {
return $this->redirect()->toRoute('user/login', array('controller'=>'user', 'action'=>'login'));
}
public function loginAction() {
$form = new Login();
return ['form' => $form];
}
我感觉我有错误的child_routes配置,但我无法弄清楚正确的解决方案...... :(
非常感谢任何帮助!
答案 0 :(得分:0)
应该是这样的。
public function indexAction() {
// it's user/process rather than user/login
return $this->redirect()->toRoute('user/process', array('controller'=>'user', 'action'=>'login'));
}
有关您的信息,zf2路由将查找路由密钥。
'user' => array( /** toRoute('user', ... ) **/
'type' => 'Literal',
'options' => array(
// ...
),
'may_terminate' => true,
'child_routes' => array(
'process' => array( /** toRoute('user/process', ... ) **/
// ...
),
'some-other-route' => array( /** toRoute('user/some-other-route', ... ) **/
// ...
),
),
),
答案 1 :(得分:0)
$this->redirect()->toRoute('user/login')
的路由名称与路由配置中的数组密钥相关(而不是route
参数,因为我认为你会混淆它)
所以你需要做的就是添加一个新的登录信息'路由。
'user' => array(
'type' => 'Literal',
'options' => array(
'route' => '/user',
'defaults' => array(
'__NAMESPACE__' => 'TAuth\Controller',
'controller' => 'User',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// Placed before 'process' so it would match first
'login' => array(
'type' => 'Literal',
'options' => array(
'route' => '/login',
'defaults' => array(
// controller & namespace inherited from parent
'action' => 'login',
),
),
'may_terminate' => true,
),
'process' => array(
// .....
),
),
)