Невозможно отобразить форму в Symfony 6.2

Я только что обновился до Symfony 6.2 (точнее, 6.2.6) и теперь, не знаю почему, не могу отобразить форму. Вот что говорит отладчик:

Object of class Symfony\Component\Form\FormView could not be converted to string

В Symfony 6.2, согласно документации, должна быть возможность передавать только FormInterface в метод рендеринга в Controller. Однако в обоих случаях (то есть даже при использовании метода createView()) он не может отобразить саму форму. Есть идеи, где может быть проблема?

Метод контроллера:

#[Route(path: '/register', name: 'security-register')]
    public function register(Request $request, MailUtil $util): Response
    {
        $form = $this->createForm(RegistrationForm::class);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()){
            $mail = new Mail();
            $mail->setRecpient($form->get('email')->getData());
            $mail->setTemplate("TestMail");
            $util->sendMail($mail);
        }

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

Класс формы:

class RegistrationForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->add('email', EmailType::class, [
            'required' => true
            ])
            ->add('password', RepeatedType::class, [
                'type' => PasswordType::class,
                'invalid_message' => 'register.error.password',
                'required' => true,
                'first_options' => ['label' => 'Password'],
                'second_options' => ['label' => 'Repeat password']
            ])
            ->add('submit', SubmitType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'csrf_protection' => true,
            'csrf_field_name' => '_csrf',
            'csrf_token_id' => 'user_register'
        ]);
    }
}

Ветка:

{% block container %}
    <div class = "row">
        <div class = "col s6 offset-s3">
            <div class = "card-panel blue-grey darken-1" data-darkmode = "card-panel blue-grey darken-3">
                {% if not app.user %}
                    <h4 class = "white-text center-align ">
                        Register
                    </h4>
                    {{ form_start(form) }}
                    {{ form.email }}
                    {{ form_end(form) }}
                    <div class = "white-text center-align">
                        You are logged in as {{ app.user.userIdentifier }}<br><br><a class = "waves-effect waves-light btn" href = "{{ path('app_logout') }}">Logout</a>
                    </div>
                {% endif %}
            </div>
        </div>
    </div>
{% endblock %}

Пытался использовать новый подход Symfony 6.2, как указано в документации: https://symfony.com/doc/current/forms.html#rendering-forms

А затем попытался использовать старый с методом createView().

Ожидаемый результат должен быть отображен в форме, однако оба метода выдают одну и ту же трассировку стека.

Посмотрите внимательно на пример в документации. Относительно новый метод AbstractController::render принимает исходную форму $form в качестве входных данных и вызывает для нее вызов createView. Также полезно взглянуть на исходный код AbstractController, чтобы точно увидеть, что происходит и чем он отличается от предыдущей версии Symfony.

Cerad 12.02.2023 23:32

@Cerad Привет. Как вы можете видеть в вопросе, было это предложение: «в обоих случаях (имеется в виду даже использование createView())», означающее, что до того, как этот вопрос был задан, я пытался передать FormInterface без метода createView().

inao 13.02.2023 13:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В веточке {{ form.email }} неправильно. Вероятно, поэтому возникает ошибка.

Переключиться на {{ form_row(form.email) }}, например

Спасибо за подсказку. Совершенно пропустил, что это было там. Спасибо :)

inao 13.02.2023 13:32

Добро пожаловать, часто самое очевидное, что мы все скучаем, ха-ха

ThomasL 13.02.2023 14:25

Или вы можете использовать виджет и ярлык отдельно.

{{ form_label(form.email) }}
{{ form_widget(form.email) }}

Другие вопросы по теме