На всякий случай, если кто-то еще столкнется с этим (я просто потратил несколько часов впустую)... Если параметр, который вы передаете, соответствует значению по умолчанию, Routing.generate не включает параметр.
Например: Контроллер:
/**
* @Route("/plc/data/{systemID}/{tagID}", name="web_plc_data", options = { "expose" = true })
*/
public function indexAction(Request $request, $systemID=1, $tagID=16)
{
}
Из веточки:
var url = Routing.generate('web_data', { systemID: 10, tagID: 16 });
Будет создан маршрут: /plc/data/10 (обратите внимание, что параметр tagID игнорируется)
Из веточки:
var url = Routing.generate('web_data', { systemID: 10, tagID: 17 });
Будет создан маршрут: /plc/data/10/17 (параметр tagID теперь включен, так как он не соответствует умолчанию)
Лучшим решением, которое я смог найти, было установить для параметров по умолчанию значение NULL в маршруте, а затем инициализировать в самой функции (если значение null, установить какое-то значение).
Ie:
/**
* @Route("/plc/data/{systemID}/{tagID}", name="web_plc_data", options = { "expose" = true })
*/
public function indexAction(Request $request, $systemID=null, $tagID=null)
{
if ($systemID==NULL)
{
$systemID = 1;
}
if ($tagID==NULL)
{
$tagID = 16;
}
}
Реализация имеет смысл, но немного сбивает с толку, поскольку вызывает неожиданное поведение.
20.02.2019