Typo3 8.7.10 Flexform itemsProcFunc, пользовательская функция контроллера, хранилище NULL - PullRequest
0 голосов
/ 16 октября 2018

В моих плагинах Typo3 я хочу дать администратору возможность выбирать некоторые элементы из выпадающего списка, содержимое которого хранится в базе данных «средств», используя репозиторий «СредстваRepository.php».

По умолчанию система использует UID в качестве значения каждого элемента.Поэтому я хочу использовать пользовательскую функцию, чтобы гарантировать, что метка и значение каждого элемента в раскрывающемся списке использует то, что я хочу.

Я использую flexform и тег itemsProcFunc для вызова моей пользовательской функции.Пользовательская функция находится в контроллере с именем «FacilitiesController.php»

. Контроллер использует инъекцию для ссылки на репозиторий, например:

 /* @var \MyCompany\MyPlugin\Domain\Repository\FacilitiesRepository
 * @inject
 */
 protected $facilitiesRepository;

Все функции в контроллере успешно подключаются к репозиторию., поэтому я знаю, что это работает.

Я пытаюсь использовать функцию репозитория findAll ().

Моя пользовательская функция успешно вызывается из flexform, однако всякий раз, когда она ссылается на предоставляемый объект средств, репозитарийошибка: вызов функции-члена findAll () для null.

Я попытался заменить findAll на функцию test () в хранилище, но я все еще получаю: вызов функции-члена test () для null.

Нуль всегда возвращается.

Я пытался ввести репо другими способами (я думаю, что есть 3 способа), но результат тот же.

Вот моя пользовательская функция:

public function findAllForFlexForm($config){ 

    $categories = $this->facilitiesRepository->findAll();  // <--here is the problem

    // create option list
    $optionList = array();

    foreach($categories as $key=>$item){
        $label = $item['id'];
        $value = $item['titel_de'];

        $optionList[] = array(0 => $label, 1 => $value);
    }

    // return config
    $config['items'] = array_merge($config['items'], $optionList);
    return $config;

}

Есть ли какая-то причина, по которой мое хранилище объектов не распознается?Если бы я запустил эту функцию из FE, она вернулась бы правильно.

1 Ответ

0 голосов
/ 16 октября 2018

В FE вы находитесь в контексте Extbase, а это не относится к бэкэнду.Поскольку загрузка extbase довольно дорога, я предлагаю вам сделать запрос с использованием Doctrine DBAL и получить данные напрямую.

...