2016-02-26 2 views
1

Я работаю над приложением ZF2, где мне нужен маршрут, как это:ZF2 сегментирован маршрут ограничение REGEX

'storage-deliver' => array(
    'type' => 'Segment', 
    'options' => array(
     'route' => '/storage/:uuid/:path', 
     'constraints' => array(
      'uuid' => '[a-zA-Z0-9-]*', 
      'path' => '[a-zA-Z0-9-_\./\+]*' 
     ), 
     'defaults' => array(
      'controller' => 'StorageController', 
      'action' => 'deliver', 
     ) 
    ) 
) 

Маршрут должен быть в состоянии соответствовать любому маршруту позади uuid ограничения.

Примеры:

/storage/0e529c8b-2403-40c1-a5bf-c6819e992079/some.file 
/storage/0e529c8b-2403-40c1-a5bf-c6819e992079/an/undefined/depth/path/to/some.file 

Я знаю, что UUID ограничение не является правильным, но это не имеет отношения к моей проблеме прямо сейчас. Задачей является заданное ограничение path. Он должен быть в состоянии соответствовать тому, что выглядит в остальной части данного URL.

До сих пор данное определение [a-zA-Z0-9-_\./\+]* работает (по крайней мере, для примеров, которые я использую), но я уверен, что есть способ сделать это намного лучше (и способ, который действительно соответствует всем действительным возможностям !).

Где-то здесь я нашел следующий пример маршрута:

/storage/:uuid/:path{-} 

Сначала все было хорошо выглядеть, но path не совпадают во всех случаях.

Любая помощь приветствуется!

Спасибо!

+1

Если путь должен соответствовать чему-либо, замените шаблон на '. *' Или '. +' Или (если не должно быть ничего, кроме '/') - '[^ /] *' –

+0

Nice! Работает так, как ожидалось. Сначала я попробовал '[\ s \ S] *', который также работает, но '. *' Кажется намного понятнее. Спасибо за это. Преобразуйте свой комментарий в ответ и чтобы я мог его принять! :) – Marco

+0

Я не уверен, правильно ли прочитал вопрос, но зачем использовать какое-либо ограничение в части «путь»? Разве ваша цель не ограничена? – Sebi

ответ

1

Чтобы соответствовать любому символу, кроме символа новой строки, вы всегда можете рассчитывать на жадного соответствует шаблону точка:

.* 

Эта модель может соответствовать пустой строке, так что, если вы не хотите, чтобы заменить * (что означает * ноль или более случаев) с квантом + (что означает одно или несколько вхождений).

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