首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2 - Zend 2,理解路由

ZF2 - Zend 2,理解路由
EN

Stack Overflow用户
提问于 2014-04-24 21:20:21
回答 1查看 324关注 0票数 3

我试图让我的头脑在ZF2模块路由。

目前,我只能为单个操作创建一个控制器,并且很难找到这个路由。我已经看过其他模块和插件,我可以得到它,只是需要一个小的推动“得到它”。

在本例中,我试图路由到两个操作: indexAction和cmstoolsAction

本质上,用户导航到:

代码语言:javascript
复制
/affiliates/overview
/affiliates/cmstools

错误是:

代码语言:javascript
复制
The requested URL could not be matched by routing.

我认为我正在挣扎的地方首先是理解MVC是如何工作的,并在细节上迷失方向。手册中有这么多的信息,它变得有点压倒性。

无论如何-将非常感谢任何投入!

模块结构的图像:

我的控制器看起来是这样的:

代码语言:javascript
复制
<?php
namespace Affiliates\Controller;
use Zend\Mvc\Controller\AbstractActionController;

class AffiliatesController extends AbstractActionController
{
    //Overview page
    public function IndexAction()
    {

    }

    public function CmstoolsAction()
    {

    }


}

我的模块配置如下所示:

代码语言:javascript
复制
<?php
return array(
'view_manager' => array(
    'template_path_stack' => array(
        'affiliates' => __DIR__ . '/../view',
    ),
),
'controllers' => array(
    'invokables' => array(
        'Affiliates\Controller\Affiliates' =>
        'Affiliates\Controller\AffiliatesController'
    ),
),
'router' => array(
    'routes' => array(
        'affiliates' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/overview',
                'defaults' => array(
                    'controller'    => 'Affiliates',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'cmstools' => array(
                    'type'    => 'Literal',
                    'options' => array(
                        'route'    => '/cmstools',
                        'defaults' => array(
                            'controller' => 'Affiliates',
                            'action'     => 'cmstools',
                        ),
                    ),
                ),

            ),
        ),

    ),

),

);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-24 21:31:16

路由配置是这里唯一重要的部分。目前,您有一个用于/overview的路由,其中有一个用于/cmstool的子路由。这将匹配以下URL:

代码语言:javascript
复制
/overview
/overview/cmstool

不完全是你想要的。

有几种不同的方法可以配置这个。最接近您目前拥有的是一条用于/affiliates的路由,有两条子路由,一条用于您的操作。这方面的配置如下:

代码语言:javascript
复制
'router' => array(
    'routes' => array(
        'affiliates' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/affiliates',
                'defaults' => array(
                    'controller'    => 'Affiliates',
                    'action'        => 'index',
                ),
            ),
            'child_routes' => array(
                'overview' => array(
                    'type'    => 'Literal',
                    'options' => array(
                        'route'    => '/overview',
                        'defaults' => array(
                            'controller' => 'Affiliates',
                            'action'     => 'index',
                        ),
                    ),
                ),
                'cmstools' => array(
                    'type'    => 'Literal',
                    'options' => array(
                        'route'    => '/cmstools',
                        'defaults' => array(
                            'controller' => 'Affiliates',
                            'action'     => 'cmstools',
                        ),
                    ),
                ),
            ),
        ),
    ),
),

此配置包含三个路由:affiliatesoverviewcmstools。后两者都是附属公司的儿童路线。请注意,我从附属路由中删除了行'may_terminate' => true,。这决定了附属路由是否会单独匹配(即URL/affiliates是否工作)。既然你没有把这个列出来,我猜你也不想。

您可以配置的另一种方法是简单地创建两个文字路由,每一个URL一次(根本不使用子路由):

代码语言:javascript
复制
'router' => array(
    'routes' => array(
        'overview' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/affiliates/overview',
                'defaults' => array(
                    'controller' => 'Affiliates',
                    'action'     => 'index',
                ),
            ),
        ),
        'cmstools' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/affiliates/cmstools',
                'defaults' => array(
                    'controller' => 'Affiliates',
                    'action'     => 'cmstools',
                ),
            ),
        ),
    ),
),
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23280087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档