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


Zend: How to add/get URL parameters to a controller action

我有一个/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');