Zend:如何向控制器操作添加/获取URL参数

时间:2014-09-04 12:55:11

标签: php zend-framework2

我有一个/ 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?还有什么我需要改变的路线定义才能使其发挥作用吗?

1 个答案:

答案 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');