我正在使用Zend Framework 2.2.4创建一个mvc应用程序。
我有一个名为DrinkManangement
的模块,在其中我有一个名为DrinkController
的控制器和一个名为drinkQueryAction
的操作。
来自名为add-inventory
的视图phtml我正在尝试将网址添加到表单操作属性。
我正在使用以下代码:
$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(
),
),
),
),
),
),
),
答案 0 :(得分:3)
您应该首先了解路线的工作原理。您有一个名为drink
的“根”路线。此路线有一个名为default
的孩子。现在drink
是一条文字路线。这意味着,此路线中没有参数,并且它始终是静态网址/drink-management
。
子路由default
是段路由,您可以为其提供参数。因此,如果在视图助手中使用子路径,则可以使用类似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