Как создать маршрут с тире и подчеркиванием в silex - PullRequest
1 голос
/ 24 ноября 2011

У меня есть проект в php-silex, но я использую этот фреймворк.Я создаю какой-то маршрут, но некоторые не работают.Вот некоторый пример:

/*
**INIT HERE & SOME OTHER CODE
*/
 $app->match('letter-{letter}', function($letter) use()
 {
    echo 'With dash';
 });

 $app->match('letter_{letter}', function($letter) use()
 {
    echo 'With underscore';
 });

 $app->match('{other}', function($other) use()
 {
    echo 'Other view';
 });

Если я введу / letter-a, то вывод будет 'Width dash', но если я введу '/ letter_a', вывод будет 'Other view', а не 'Width underscore'.

Я хочу знать, почему это произошло, и как показать «подчеркивание ширины»?

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

Проблема в том, что маршруты: letter-{letter} и letter_{letter} разрешаются на одно и то же имя маршрута, поэтому второй переопределяет первый.Решение состоит в том, чтобы явно дать маршрутам уникальное имя.

Вы можете сделать это, используя bind:

$app->match('letter-{letter}', function ($letter) {
    echo 'With dash';
})
->bind('letter_dash');

$app->match('letter_{letter}', function ($letter) {
    echo 'With underscore';
})
->bind('letter_underscore');

Я открою билет на трекер Silex, чтобы увидеть, еслимы можем выдать ошибку, если существуют два маршрута с одинаковым именем.(РЕДАКТИРОВАТЬ: сделано )

0 голосов
/ 26 ноября 2011

Я не верю, что они допускают этот тип синтаксиса, они выполняют поиск карт между вашими слешами '/' и получают все значения, очевидно, что они не допускают истинного сопоставления с образцом.

...