路由定义中的条件
Condition inside route definition
我刚开始使用ZendFramework 2
。我在我的 module.config.php
中定义了一条路线,我想在我的视图中使用 $this->url
来生成 url.
module.config.php
'settings-users-list' => array(
'type' => 'Zend\Mvc\Router\Http\Regex',
'options' => array(
'regex' => '/settings((/role/(?<role>[a-zA-Z]+))|)((/search/(?<search>[a-zA-Z0-9_-]+))|)((/page/(?<page>[0-9]+))|)((/date/(?<date>asc|desc))|)((/log/(?<log>asc|desc))|)',
'defaults' => array(
'controller' => 'Admin\Controller\Settings',
'action' => 'index',
),
'spec' => '/settings/role/%role%/search/%search%/page/%page%/date/%date%/log/%log%',
),
),
In my view
echo $this->url('admin/settings-users-list',$link_params,array('force_canonical' => true));
哪里
$link_params = array(
'controller' => 'settings',
'action' => 'index',
'role' => 'admin',
'search' => '',
'page' => '',
'date' => '',
'log' => '',
);
我的问题是,当我的一部分参数为空时,生成的 url 不是所需的参数。在这种情况下,生成的 url 是:
www.mysite.com/admin/settings/role/admin/search//page//date//log/
有没有办法在不设置这个参数的情况下不显示search
、page
、date
、log
。也许有没有办法在 module.config.php
.
的 settings-users-list
路由的 spec
字段中放置一个条件
在您的情况下,我建议您根本不要将 search
、page
、date
和 log
等搜索参数添加到您的路线中。这些是查询参数,对于此 ZF2 url 帮助器,选项中有一个特殊的 query
键。您还可以在 ZF2 url
查看帮助程序文档的 Query String Arguments 段中找到它。在您的情况下,您可以这样使用它:
$params = array(
'controller' => 'settings',
'action' => 'index',
'role' => 'admin'
);
$query = array(
'search' => '',
'page' => '',
'date' => '',
'log' => ''
);
$options = array(
'force_canonical' => true,
'query' => $query
);
echo $this->url('admin/settings-users-list', $params, $options);
我还建议简化您的路由器。如果没有正则表达式,它将更具可读性:
'settings' => array(
'type' => 'Literal',
'options' => array(
'route' => '/settings'
)
'may_terminate' => false,
'child_routes' => array(
'role' => array(
'type' => 'Segment',
'options' => array(
'route' => '/role/:role'
'constraints' => array(
'role' => '[a-zA-Z]*'
),
'defaults' => array(
'controller' => 'Application\Controller\Settings',
'action' => 'index',
)
)
)
)
),
那么你可以这样做:
echo $this->url('settings/role', $params, $options);
我刚开始使用ZendFramework 2
。我在我的 module.config.php
中定义了一条路线,我想在我的视图中使用 $this->url
来生成 url.
module.config.php
'settings-users-list' => array(
'type' => 'Zend\Mvc\Router\Http\Regex',
'options' => array(
'regex' => '/settings((/role/(?<role>[a-zA-Z]+))|)((/search/(?<search>[a-zA-Z0-9_-]+))|)((/page/(?<page>[0-9]+))|)((/date/(?<date>asc|desc))|)((/log/(?<log>asc|desc))|)',
'defaults' => array(
'controller' => 'Admin\Controller\Settings',
'action' => 'index',
),
'spec' => '/settings/role/%role%/search/%search%/page/%page%/date/%date%/log/%log%',
),
),
In my view
echo $this->url('admin/settings-users-list',$link_params,array('force_canonical' => true));
哪里
$link_params = array(
'controller' => 'settings',
'action' => 'index',
'role' => 'admin',
'search' => '',
'page' => '',
'date' => '',
'log' => '',
);
我的问题是,当我的一部分参数为空时,生成的 url 不是所需的参数。在这种情况下,生成的 url 是:
www.mysite.com/admin/settings/role/admin/search//page//date//log/
有没有办法在不设置这个参数的情况下不显示search
、page
、date
、log
。也许有没有办法在 module.config.php
.
settings-users-list
路由的 spec
字段中放置一个条件
在您的情况下,我建议您根本不要将 search
、page
、date
和 log
等搜索参数添加到您的路线中。这些是查询参数,对于此 ZF2 url 帮助器,选项中有一个特殊的 query
键。您还可以在 ZF2 url
查看帮助程序文档的 Query String Arguments 段中找到它。在您的情况下,您可以这样使用它:
$params = array(
'controller' => 'settings',
'action' => 'index',
'role' => 'admin'
);
$query = array(
'search' => '',
'page' => '',
'date' => '',
'log' => ''
);
$options = array(
'force_canonical' => true,
'query' => $query
);
echo $this->url('admin/settings-users-list', $params, $options);
我还建议简化您的路由器。如果没有正则表达式,它将更具可读性:
'settings' => array(
'type' => 'Literal',
'options' => array(
'route' => '/settings'
)
'may_terminate' => false,
'child_routes' => array(
'role' => array(
'type' => 'Segment',
'options' => array(
'route' => '/role/:role'
'constraints' => array(
'role' => '[a-zA-Z]*'
),
'defaults' => array(
'controller' => 'Application\Controller\Settings',
'action' => 'index',
)
)
)
)
),
那么你可以这样做:
echo $this->url('settings/role', $params, $options);