У меня следующая проблема:
->createAdapter(ORMAdapter::class, [
'entity' => Systems::class,
'query' => function (QueryBuilder $builder) {
$builder
->select('systems')
->from(Systems::class, 'systems')
->orderBy('systems.level', 'ASC')
->addorderBy('systems.label', 'ASC')
->andwhere('systems.territory = :SearchTerritory')
->setParameter('SearchTerritory', 'Independent');
},
Код работает, но когда я заменяю «Независимый» на переменную $ Territory в качестве примера, он не работает, и появляется сообщение о том, что переменная не объявлена. Сброс переменной перед созданием таблицы данных показывает мне, что переменная установлена правильно, поэтому каким-то образом глобальная переменная контроллера не отправляется в таблицу данных, и я не могу понять, как это сделать.
Вот полный код:
public function territoryList($territory, Environment $twig, Request $request)
{
$table = $this->createDataTable()
->add('label', TextColumn::class, ['label' => 'Name'])
->add('level', TextColumn::class, ['label' => 'Level'])
->add('coordinates', TextColumn::class, ['label' => 'Coordinates'])
->add('territory', TextColumn::class, ['label' => 'Territory'])
->add('missions', BoolColumn::class, ['label' => 'M', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('parsteel', BoolColumn::class, ['label' => 'PS', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('tritanium', BoolColumn::class, ['label' => 'TT', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('dilithium', BoolColumn::class, ['label' => 'DL', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('rawgas', BoolColumn::class, ['label' => 'RG', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('rawcrystal', BoolColumn::class, ['label' => 'RC', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->add('rawore', BoolColumn::class, ['label' => 'RO', 'searchable' => false, 'trueValue' => '<i class = "fas fa-check"></i>', 'falseValue' => '<i class = "fas fa-times"></i>'])
->createAdapter(ORMAdapter::class, [
'entity' => Systems::class,
'query' => function (QueryBuilder $builder) {
$builder
->select('systems')
->from(Systems::class, 'systems')
->orderBy('systems.level', 'ASC')
->addorderBy('systems.label', 'ASC')
->andwhere('systems.territory = :SearchTerritory')
->setParameter('SearchTerritory', 'Independent');
},
])
->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
без рендера веточки и т. д.




В PHP анонимные функции, такие как обратный вызов, предоставляемый в качестве параметра query, имеют частную область видимости и не имеют неявного доступа к внешним переменным. Для справки см. раздел о наследовании переменных из родительской области в документации PHP.
Чтобы импортировать переменную $territories, вам необходимо ее записать в use, т.е.
'query' => function (QueryBuilder $builder) use ($territories) { ...