Как я могу заменить динамический класс переменной?

Я хотел бы заменить свой класс переменной:

$type = "TextType";

$formBuilder->add($name, TextType::class, array('attr' => array('class' => 'form-control'), 'data' => $dataItem, 'mapped' => false, 'label' => $name));

Это мой подход:

$formBuilder->add($name, $type::class, array('attr' => array('class' => 'form-control'), 'data' => $dataItem, 'mapped' => false, 'label' => $name));

Я получаю сообщение об ошибке:

Compile Error: Dynamic class names are not allowed in compile-time ::class fetch

Но как я могу это сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка говорит вам, что вы не можете использовать динамические имена классов.

Так что вы не можете.

Используйте имя класса непосредственно в вызове add(). Вы даже можете создать переменную, содержащую полное имя класса, если вам действительно нужно:

$class = TextType::class;

$formBuilder->add($name, $class,
     [
          'attr'   => ['class' => 'form-control'],
          'data'   => $dataItem,
          'mapped' => false,
          'label'  => $name
     ]
);

Вы знаете, я хочу хранить разные классы в базе данных. Вот так: i.imgur.com/kSXDfsM.png, чтобы я мог заменить его для каждого элемента. Но это не работает

peace_love 14.03.2019 08:37

Знаешь, что я пытаюсь сделать?

peace_love 14.03.2019 08:41

Я храню его именно так в базе данных TextType::class, но когда я хочу его использовать, возникает ошибка Could not load type "TextType::class": class does not exist.

peace_love 14.03.2019 08:47

Если вам действительно нужно это сделать, не храните TextType::class. Сохраните полное имя класса. Например. App\Form\TextType.

yivi 14.03.2019 08:49

А, хорошо, я понимаю. Так что это действительно то, что я ищу! Я не должен писать TextType::class тогда. Вместо App\Form\TextType. Спасибо!

peace_love 14.03.2019 08:50

Извините, что спрашиваю, для вас это глупый вопрос, я думаю, но как я могу узнать, какая ссылка является правильной для TextType Could not load type "App\Form\TextType": class does not exist.

peace_love 14.03.2019 08:53

Я реализую это так use Symfony\Component\Form\Extension\Core\Type\TextType;

peace_love 14.03.2019 08:54

Это вымышленное имя, я не знаю вашей системы. Вы должны использовать тот, который вы фактически используете в своем приложении. Найдите класс в своем коде. Его полное имя будет объявлением пространства имен вверху + имя класса.

yivi 14.03.2019 08:54

Тогда имя класса Symfony\Component\Form\Extension\Core\Type\TextType.

yivi 14.03.2019 08:55

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