Хорошо, если я правильно понял ваш вопрос, что вы в основном хотите сделать, это добавить новый вариант для вашего построителя форм для заданного типа.
index.php - В принципе здесь мы просто создадим экземпляр FormBuilder и добавим одно поле для целей тестирования.
<?php
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
$formFactory = Forms::createFormFactoryBuilder()
->getFormFactory()
->createBuilder()
->add('test', 'text', array('customAttribute' => true))
->getForm()
->createView();
Если мы открываем браузер прямо сейчас, мы получим хорошую и большую ошибку, говорят нам, что «CustomAttribute» неизвестно вариант.
Итак, давайте создадим пользовательский тип формы! Как вы видели, я назвал его TextCustomType, так как я продлеваю тип формы «текст».
Тип класса:
<?php
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
class TextCustomType extends AbstractTypeExtension {
public function getName() {
return "text";
}
public function getExtendedType() {
return "text";
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setOptional(array('customAttribute'));
$resolver->setDefaults(array('customAttribute' => true));
}
public function buildView(FormView $view, FormInterface $form, array $options) {
$view->vars['customAttribute'] = $options['customAttribute'];
}
}
Теперь мы создали наш собственный тип, так что позволяет добавить его в виде завода:
$formFactory = Forms::createFormFactoryBuilder()
->addTypeExtension(new TextCustomType()) // once the class is loaded simply pass fresh instance to ->addTypeExtension() method.
->getFormFactory()
->createBuilder()
->add('test', 'text', array('customAttribute' => true))
->getForm()
->createView();
Обновите браузер, и вы должны быть хорошо идти ! Надеюсь, у вас есть идея.
Обновлено согласно предложению ОП.
Это гораздо более полный, чем мой ответ. Может быть яснее, если вы удалите заметку о требованиях, и просто удалите их самостоятельно. Кроме того, как-то вызывать конкретную строку кода, которая выполняет решение, тоже будет здорово. Потребовал мне секунду, чтобы понять, где в вашем посте расширение будет добавлено в FormFactory. –