Используйте функцию stati c, чтобы определить массив для вариантов выбора формы - PullRequest
0 голосов
/ 22 февраля 2020

Я использую easyAdminBundle, я хотел бы знать, возможно ли использовать static function или const (определить где-нибудь в моем приложении), чтобы установить параметр choices типа choice как таковой:

- { property: tag, type: choice, type_options: { choices: 'App\Entity\News::getTags' }

С помощью функции getTags, такой как:

class News 
{
    const TAGS = ['toto','tutu'];

    static public function getTags()
    {
        return $this::TAGS;
    }
}

Это уже возможно сделать с помощью query_builder, но я не нашел никаких следов этого в документации.

На самом деле я получаю следующую ошибку, которая заставляет меня думать, что это невозможно (но, возможно, кто-то здесь делает это):

Произошла ошибка при разрешении параметров формы "Symfony \" Компонент \ Form \ Extension \ Core \ Type \ ChoiceType ": ожидается, что параметр" выборы "со значением" App \ Entity \ News :: getTags "будет иметь тип" null "или" array "или" \ Traversable ", но имеет тип "строка".

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Следуя совету @ David Alvarez , я попытался получить доступ к свойству const непосредственно из файла yaml. Это возможно благодаря этому symfony обновлению , доступному начиная с версии 3.2.

, поэтому для доступа к свойству const:

class News 
{
    const TAGS = ['toto' => 'toto','tutu' => 'tutu'];
}

я напишу:

{ choices: !php/const App\Entity\News::TAGS }

и он работает как шарм

0 голосов
/ 22 февраля 2020

Да, установите const TAGS на stati c и внутри getTags(), замените $this на self.

И

{ choices: App\Entity\News::getTags() }

Удалите апострофы и add () для фактического вызова функции

...