【问题标题】:$this->url returns only the module path$this->url 只返回模块路径
【发布时间】:2013-09-24 14:14:47
【问题描述】:

我正在使用 Zend Framework 2.2.4 创建一个 mvc 应用程序。

我有一个名为 DrinkManangement 的模块,在其中我有一个名为 DrinkController 的控制器和一个名为 drinkQueryAction 的操作。

从名为 add-inventory 的视图 phtml 中,我正在尝试将 url 添加到表单操作属性。

我正在使用以下代码:

$drink_query_form->setAttribute('action', $this->url('drink', array('action' => 'drink-query')));

$this->url 命令的输出只返回/drink-management,即模块的路径。但它不返回/drink-management/drink/drink-query

我在这里错过了什么?

谢谢

更新

好的,这可能与我的路线配置有关,但我不知道如何解决它

'router' => array(
    'routes' => array(
        'drink' => array(
            'type'    => 'Literal',
            'options' => array(
                // Change this to something specific to your module
                'route'    => '/drink-management',
                'defaults' => array(
                    // Change this value to reflect the namespace in which
                    // the controllers for your module are found
                    '__NAMESPACE__' => 'DrinkManagement\Controller',
                    'controller'    => 'Drink',
                    'action'        => 'add-drink',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                // This route is a sane default when developing a module;
                // as you solidify the routes for your module, however,
                // you may want to remove it and replace it with more
                // specific routes.
                '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(
                        ),
                    ),
                ),
            ),
        ),
    ),
),

【问题讨论】:

  • 路由drink的定义是什么?
  • 用路由配置更新主帖

标签: php zend-framework2


【解决方案1】:

您应该首先了解路线的工作原理。您有一个名为drink 的“根”路由。这条路线有一个名为default 的孩子。现在是drink 一条文字路线。这意味着,此路由中没有参数,并且始终是静态 url /drink-management

child-routedefault是一个segment route,可以给参数。因此,如果您在视图助手中使用子路由,则可以使用array('controller' => 'foo') 之类的数组分配参数。

现在,重要的部分是您可以使用 / 及其父级来指向此子路由。因此,您可以通过drink/default 访问您的默认值。

一个 TL;DR:

$this->url('drink/default', array('action' => 'drink-query'));

PS。对您的命名的评论:我建议您重命名您的路线,以便它们更有意义。在某种程度上,drink 是您的路线,这很好。子路由 default 令人困惑,因为它通常不是默认值,而只是您的饮料控制器的全部内容。将其合并到drink 路由中更有意义。然后你有一个单一的路线,你可以指定一个动作(控制器只是保持不变):

'router' => array(
    'routes' => array(
        'drink' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/drink-management[/:action]',
                'defaults' => array(
                    '__NAMESPACE__' => 'DrinkManagement\Controller',
                    'controller'    => 'Drink',
                    'action'        => 'add',
                ),
            ),
        ),
    ),
),

现在您有了一个可以执行操作的饮料路线,它只停留在饮料控制器上:

$this->url('drink'); // to /drink-management

或者一个动作:

$this->url('drink', array('action' => 'query')); // to /drink-management/query

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多