исключить URL-адрес строки в контроллере Symfony

#php #symfony

Вопрос:

Я бы хотел, чтобы мой контроллер работал для всего, кроме url ‘abc’.

  /**
     * @Route(path="/api/{url}", name="test", requirements={"url"=". "})
     */
    public function index(string $url)
    {
       ...
    }
 

Как мне преобразовать URL-адрес регулярного "url"=". " выражения для такого, чтобы он был доступен всем, кроме ‘abc’?

Ответ №1:

Параметры маршрута

Параметр requirements определяет регулярные выражения PHP, которым должны соответствовать параметры маршрута, чтобы весь маршрут соответствовал.

В вашем случае вы хотите разрешить все, кроме определенной строки.

Просто используйте обычное регулярное выражение using ^((?!abc).)*$ , если вы не хотите , чтобы ваш параметр url содержал строку abc .

Знайте, что abcde иначе dabc это не сработает.

Таким образом, ваш маршрут будет

 /**
 * @Route(path="/api/{url}", name="test", requirements={"url"="^((?!abc).)*$*"})
 */
public function index(string $url)
{
   //allow foo
   //allow bar
   //block abc
   //block fooabc
   //block barabc
}
 

Если вы хотите, чтобы строка содержала abc, измените свое регулярное выражение на b(?!abcb)w :

 /**
 * @Route(path="/api/{url}", name="test", requirements={"url"="b(?!abcb)w "})
 */
public function index(string $url)
{
   //allow foo
   //allow bar
   //block abc
   //allow fooabc
   //allow barabc

}
 

Обратите внимание, что вы также можете добавить больше слов b(?!foo|barb)w :