Компонент Symfony и Omines DataTable

У меня следующая проблема:

->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 в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
410
1

Ответы 1

В PHP анонимные функции, такие как обратный вызов, предоставляемый в качестве параметра query, имеют частную область видимости и не имеют неявного доступа к внешним переменным. Для справки см. раздел о наследовании переменных из родительской области в документации PHP.

Чтобы импортировать переменную $territories, вам необходимо ее записать в use, т.е.

'query' => function (QueryBuilder $builder) use ($territories) { ...

Другие вопросы по теме