@vladislav997

Как разобрать на запчасти form_widget?

Подскажите, как кастомизировать form_widget? как вообще из form_widget сделать нормальные инпуты, чтобы с каждым отдельно можно было работать?

Controller:
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $formAuthenticator)
    {
        $form = $this->createForm(UserRegistrationFormType::class);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            /** @var User $user */
            $user = $form->getData();

            $user->setPassword($passwordEncoder->encodePassword($user, $user->getPassword()));

            $em = $this->getDoctrine()->getManager();

            $em->persist($user);
            $em->flush();
        }

        return $this->render('security/register.html.twig', [
            'registrationForm' => $form->createView(),
        ]);


twig:
{{ form_start(registrationForm) }}
                {{ form_widget(registrationForm, {'attr': {'class': 'uk-margin-large'}}) }}
                <button class="btn btn-lg btn-primary btn-block" type="submit">
                Register
                </button>
{{ form_end(registrationForm) }}


Как привести всё это в нормальный вид:
<form action="..">
<input ...
<button ...
</form>
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
how to customize forms
Виджет состоит из form_row(), где каждый роу отвечает за один инпут. Чтобы переопределить рендер одного роу, нужно найти алиас этого куска шаблона в вендоре компонента форм и создать у себя отдельный шаблон только под этот инпут (или под виджет). На Symfonycasts есть объясняющее видео
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vladislav997 Автор вопроса
{{ form_start(registrationForm) }}

                <div class="uk-margin">
                    {{ form_label(registrationForm.email, 'Эл. почта', {'label_attr': {'class': 'uk-form-label'}}) }}
                    {{ form_widget(registrationForm.email, {'attr': {'class': 'uk-input'}}) }}
                </div>

                <div class="uk-margin">
                    {{ form_label(registrationForm.password, 'Пароль', {'label_attr': {'class': 'uk-form-label'}}) }}
                    {{ form_widget(registrationForm.password, {'attr': {'class': 'uk-input'}}) }}
                </div>

                <div class="uk-margin" style="display:flex;justify-content:center">
                    <button class="uk-button uk-button-primary" type="submit">
                    Зарегистрироваться
                    </button>
                </div>
                {{ form_end(registrationForm) }}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы