如何在zend框架2中配置路由?

时间:2015-01-19 07:23:51

标签: php zend-framework2

我是初学者,正在使用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;
      }
}

1 个答案:

答案 0 :(得分:2)

loginAction的网址不是/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',
                    ),
                ),
            ),
        ),
    ),