Я в процессе миграции приложения Symfony 2.8 на 3.4, а затем на 4.1.Как вы знаете, ::getName()
пользовательского типа поля формы устарело и было удалено в 2.8 и 3.x соответственно.Поэтому теперь необходимо указать FQCN при добавлении настраиваемого поля в форму.Проблема в том, что у нас есть таблица Settings
с набором или строками, представляющими поля формы.Каждая строка этого типа в таблице БД имеет свой собственный тип поля (столбец в таблице БД).Таким образом, это выглядит так:
'4', '1', NULL, 'password_expiration', '365', 'integer', 'Period of user password expiration, in days', 'Password Expiration'
'6', '1', NULL, 'login_min_length', '3', 'integer', 'Minimum allowable login length', 'Login Minimum Length'
....
'17', '1', NULL, 'help_page', '', 'ckeditor', 'Help page content for users', 'Help page'
, где integer
и ckeditor
- это значения, используемые для передачи в качестве имени типа настраиваемого или собственного поля Symfony в вызов ::add()
формы.
Как вы можете себе представить, оно вызывает исключение Could not load type "ckeditor": class does not exist
в 3.4, потому что мне нужно как-то ссылаться на FQCN MyBundle\Form\Type\CkEditorType::class
.Но даже если я обновлю значения полей базы данных на что-то вроде 'MyBundle \ Form \ Type \ CkEditorType :: class' (с явно экранированными обратными слешами, очевидно), это будет интерпретировано как строка и не будет вычислено.
Итак, вопрос в том, как сохранить FQCN в поле базы данных и интерпретировать его при визуализации формы?