Предоставлено
Владимир Лучанинов
в № 29599.
В приложениях Symfony вы можете дать заполнителям маршрута значение по умолчанию, чтобы их можно было опустить в сгенерированном URL-адресе. Рассмотрим это определение маршрута:
namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class BlogController extends AbstractController { /** * @Route("/blog/{page}", name="blog_list") */ public function list($page = 1) { // ... } }
Если вы не укажете значение переменной page
при создании URL для маршрута blog_list
, результирующий URL будет /blog
, а значение заполнителя page
будет 1
:
$router = ... // a UrlGeneratorInterface instance $url = $router->generate('blog_list'); // /blog $url = $router->generate('blog_list', ['page' => 1]); // /blog/1 $url = $router->generate('blog_list', ['page' => 7]); // /blog/7
Хотя это желательное поведение в большинстве приложений, иногда вы можете предпочесть всегда включать значение заполнителя, даже если вы не указываете его при создании URL. В Symfony 4.3 мы сделали это возможным с помощью нового синтаксиса для заполнителей маршрута:
/** * @Route("/blog/{!page}", name="blog_list") */ public function list($page = 1) { // ... }
Символ !
перед именем заполнителя указывает Symfony всегда включать его значение в сгенерированный URL, независимо от того, является ли это значением по умолчанию:
$url = $router->generate('blog_list'); // /blog/1 $url = $router->generate('blog_list', ['page' => 1]); // /blog/1 $url = $router->generate('blog_list', ['page' => 7]); // /blog/7