Для чего все это было нужно. В Symfony была прикручена валидациячерез сторонний JS компонент который валидировал input type="digits" как integer. Я знаю что есть встроенный тип integer который дает input type="numbers" но в данном случае это не подходило.
Form Builder в Symfony 2 является очень гибким и имеет десятки готовых вариантов, но придет время, когда нужно будет создать свой собственный тип поля формы. Поваренная книга Symfony содержит большую статью о том, как создать пользовательский тип поля формы и использовать его в проекте.
В примере будем добавлять input type="tel" и класс будет называться TelType, файл, соответственно, TelType.php. Название файла должно совпадать с названием класса.
Создание класса типа поля формы
GetName() возвращает имя типа поля формы и GetParent () определяет родительский элемент type="text".
GetName - это создаваемый новый тип который наследуется от getParent().
Создание шаблона поля формы
Поскольку новое поле не сильно отличается от родительского, можно взять готовый шаблон input type="text" который находится по этому пути: Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig within the form_widget_simple block.
Чтобы создать новый шаблон, нужно создать новый файл /Resources/views/Form/fields.html.twig с таким содержимым:
Конфигурация
В основной файл конфигурации config.xml в секции twig: добавить вызов нового шаблона:
AcmeBundle/services.xml добавить:
Форма
Теперь можно добавлять новый тип поля в форму и не словить exception.
Надеюсь, ничего не упустил.