0

我是ZF2的新手。我对 url('route-name', $urlParams, $urlOptions); 有疑问 ?>

当模块中有多个控制器时,我应该如何构造 $urlParams 和 $urlOptions?

我将 Album 模块重命名为 Shop,它有两个控制器:indexController 和 VendorController。在视图>商店>供应商>index.phtml,我添加:

<p><a href="<?php echo $this->url('shop', array('action'=>'add')); ?>">
         Add new vendor</a></p>

瞄准此链接将链接到 localhost/shop/vendor/add。但页面显示链接是: http ://host.com/shop 而我想要的是 http://host.com/shop/vendor/add

我的理解是我应该设置 $urlOPtions 字段,有人可以举个例子吗?谢谢大家下面是module.config.php:

'router' => array(
   'routes' => array(
        'shop' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/shop',
                'defaults' => array(
                    '__NAMESPACE__' => 'Shop\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                '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(
                        ),
                    ),
                ),
            ),
        ),
    ),
),
'controllers' => array(
    'invokables' => array(
        'Shop\Controller\Index' => 'Shop\Controller\IndexController',
        'Shop\Controller\Vendor'=> 'Shop\Controller\VendorController'
    ),
),
4

1 回答 1

1

您尝试用于构造 url 的路由实际上是默认子路由。所以你应该改用它:

<p><a href="<?php echo $this->url('shop/default', array('action'=>'add')); ?>">
         Add new vendor</a></p>

注意 'shop/default' 而不是 shop 来定位子路由。

此外,您应该将控制器指定为参数,因此您会得到如下内容:

<p><a href="<?php echo $this->url('shop/default', array('controller' => 'vendor', 'action'=>'add')); ?>">
         Add new vendor</a></p>
于 2013-08-27T04:04:33.340 回答