2014-09-04 2 views
0

У меня есть/контроллер файлов, которые будут иметь два действия: загрузить и загрузитьZend: Как добавить/получить параметры URL к действию контроллера

это определяется следующим образом:

'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? И есть ли что-нибудь еще, что мне нужно изменить в определении маршрута, чтобы заставить его работать?

ответ

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'); 
+0

Спасибо за очень четкий и полный ответ. – Bogdan

Смежные вопросы