Новое в Symfony 4.3: Всегда включать значения параметра маршрута по умолчанию

В приложениях 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)
    {
        // ...
    }
}

Если вы не указали значение переменной для параметра маршрута при создании URL-адреса для маршрута blog_list, результирующий URL-адрес будет /blog, а значение параметра $page равно 1:

$router = ... // a UrlGeneratorInterface instance

$url = $router->generate('blog_list');                // $url = '/blog'
$url = $router->generate('blog_list', ['page' => 1]); // $url = '/blog/1'
$url = $router->generate('blog_list', ['page' => 7]); // $url = '/blog/7'

В большинстве приложений это желаемое поведение, иногда вы можете предпочесть всегда включать значение параметра, даже если вы его не указали при создании URL-адреса. В Symfony 4.3 добавили эту возможность с новым синтаксисом для параметров маршрута:

/**
 * @Route("/blog/{!page}", name="blog_list")
 */
public function list($page = 1)
{
    // ...
}

Если перед параметром добавить символ ! то Symfony всегда будет включать его значение в сгенерированный URL, независимо от того, является ли оно значением по умолчанию:

$url = $router->generate('blog_list');                // $url = '/blog/1'
$url = $router->generate('blog_list', ['page' => 1]); // $url = '/blog/1'
$url = $router->generate('blog_list', ['page' => 7]); // $url = '/blog/7'