我有一个/ 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?还有什么我需要改变的路线定义才能使其发挥作用吗?
答案 0 :(得分:2)
我可以将路线更改为
/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',
),
),
),
),
),
如何访问
中的fileId
downloadAction
最简单的方法是use the Zend\Mvc\Controller\Plugin\Params
controller plugin从路线中获取参数。)
// FilesController::downloadAction()
$fileId = $this->params('fileId');
或具体来自路线
// FilesController::downloadAction()
$fileId = $this->params()->fromRoute('fileId');