我有一个/files控制器,它将有两个操作:上传和下载
它的定义如下:
'files' => array(
'type' => 'Segment',
'options' => array(
'route' => '/files[/:action]',
'defaults' => array(
'controller' => 'Application'Controller'Files',
'action' => 'index',
),
),
),
我想像/files/download/1一样访问下载操作?authString=asdf。在这种情况下,1是fileId。
我知道我可以将路由更改为/files[/action[/:fileId]]
来设置路由,如果我错了,请纠正我,但我如何访问downloadAction中的fileId?关于路线定义,我还有什么需要改变的吗??
我可以将路线更改为
/files[/action[/:fileId]]
来设置路线,如果我的错误,请纠正我
你没有错,那将是一条有效的路线。
关于路线定义,我还有什么需要修改的吗?
如果添加fileId
作为可选路由参数,则需要在downloadAction()
中进行一些手动检查,以确保其已设置。
另一种解决方案是将路线分成子路线,这样可以确保除非每条路线上都有正确的参数,否则不会匹配。
'files' => array(
'type' => 'Segment',
'options' => array(
'route' => '/files',
'defaults' => array(
'controller' => 'Application'Controller'Files',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'download' => array(
'type' => 'Segment',
'options' => array(
'route' => '/download/:fileId',
'defaults' => array(
'action' => 'download',
),
'constraints' => array(
'fileId' => '[a-zA-Z0-9]+',
),
),
),
'upload' => array(
'type' => 'Literal',
'options' => array(
'route' => '/upload',
'defaults' => array(
'action' => 'upload',
),
),
),
),
),
如何访问
downloadAction
内的fileId
最简单的方法是使用Zend'Mvc'Controller'Plugin'Params
控制器插件从路由中获取参数)。
// FilesController::downloadAction()
$fileId = $this->params('fileId');
或者特别是从路线
// FilesController::downloadAction()
$fileId = $this->params()->fromRoute('fileId');