如何在 zend framework 2 中配置路由?

How to configure route in zend framework 2?

我是 Zend Framework 2.3.3 的初学者。我正在尝试做一些路由,但它总是不起作用。我添加了一个名为 Manager 的新模块,文件中的以下代码 \module\Manager\config\module.config.php

'router' => array(
    'routes' => array(
        'auth' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/tologinpage',
                'defaults' => array(
                    'controller' => 'Manager\Controller\Auth',
                    'action'     => 'show-login',
                ),
            ),
            'may_terminate' => true, 
            'child_routes' => array(
                'login'  => array(
                    'type' => 'Literal',
                    'options' => array(
                        'route'    => '/login',
                        'defaults' => array('action' => 'login'),
                    ),
                    'may_terminate' => true, 
                ),
            ),
        ),
    ),
),

文件中的以下代码\module\Manager\view\manager\auth\login.phtml

<form class="form-horizontal" role="form" method="post" action="/login">
    <!-- code -->
    <div class="col-md-offset-2 col-md-8">
        <button type="submit" class="btn btn-block btn-primary">Login</button>
    </div>
</div>

如果我尝试访问第一条路线 (/tologinpage),它会起作用,

但是当我将表单提交给控制器时 AuthController\login,它总是显示 发生 404 错误找不到页面

这是我的控制器

namespace Manager\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class AuthController extends AbstractActionController
{

     public function showLoginAction()
     {
           $view = new ViewModel();

           $view->setTemplate('manager/auth/login');
           $view->setTerminal(true);  // close layout

           return $view;
      }


      public function loginAction()
      {
            var_dump($_POST);
            exit;
      }
}
loginAction 的

URL 不是 /login 而是 /tologinpage/login,因为 login 路由被定义为 tologinpage 路由的子路由。

顺便说一句,你不应该手写 URL,而应该使用 URL view helper:

<form class="form-horizontal" role="form" method="post" action="<?php echo $this->url('auth/login'); ?>">

如果你想让这些角色处于同一级别,请将它们放在配置数组中的同一级别:

    'router' => array(
        'routes' => array(
            'auth' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/tologinpage',
                    'defaults' => array(
                        'controller' => 'Manager\Controller\Auth',
                        'action'     => 'show-login',
                    ),
                ),
            ),
            'login'  => array(
                'type' => 'Literal',
                'options' => array(
                    'route'    => '/login',
                    'defaults' => array(
                        'controller' => 'Manager\Controller\Auth',
                        'action' => 'login',
                    ),
                ),
            ),
        ),
    ),