Я хотел бы заменить свой класс переменной:
$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
Но как я могу это сделать?






Ошибка говорит вам, что вы не можете использовать динамические имена классов.
Так что вы не можете.
Используйте имя класса непосредственно в вызове add(). Вы даже можете создать переменную, содержащую полное имя класса, если вам действительно нужно:
$class = TextType::class;
$formBuilder->add($name, $class,
[
'attr' => ['class' => 'form-control'],
'data' => $dataItem,
'mapped' => false,
'label' => $name
]
);
Знаешь, что я пытаюсь сделать?
Я храню его именно так в базе данных TextType::class, но когда я хочу его использовать, возникает ошибка Could not load type "TextType::class": class does not exist.
Если вам действительно нужно это сделать, не храните TextType::class. Сохраните полное имя класса. Например. App\Form\TextType.
А, хорошо, я понимаю. Так что это действительно то, что я ищу! Я не должен писать TextType::class тогда. Вместо App\Form\TextType. Спасибо!
Извините, что спрашиваю, для вас это глупый вопрос, я думаю, но как я могу узнать, какая ссылка является правильной для TextType Could not load type "App\Form\TextType": class does not exist.
Я реализую это так use Symfony\Component\Form\Extension\Core\Type\TextType;
Это вымышленное имя, я не знаю вашей системы. Вы должны использовать тот, который вы фактически используете в своем приложении. Найдите класс в своем коде. Его полное имя будет объявлением пространства имен вверху + имя класса.
Тогда имя класса Symfony\Component\Form\Extension\Core\Type\TextType.
Вы знаете, я хочу хранить разные классы в базе данных. Вот так: i.imgur.com/kSXDfsM.png, чтобы я мог заменить его для каждого элемента. Но это не работает