Как отобразить ошибку в моем входном файле на Symfony 4?

Я работаю над своим первым проектом Symfony, и мне нужно создать красивые ошибки для формы с загрузкой ввода.

На самом деле, я успешно меняю свои параметры на лимит поста 20 мес и предельный размер загружаемого файла 20 мес.

В моем объекте у меня есть Assert (от symfony) для моего свойства «портфолио».

    /**
 * @Assert\File(
 *     maxSize = "5M",
 *     mimeTypes = {"application/pdf"},
 *     mimeTypesMessage = "Votre fichier doit être au format PDF"
 * )
 */
public $portfolio;

Кстати, я сделал свой импорт, как указано в документации Symfony.

У меня есть выражение ветки, чтобы напрямую отображать мои ошибки, когда я пытаюсь проверить неправильную форму.

Вот функция моего контроллера:

  public function formjob(\Swift_Mailer $mailer, Request $request)
{
    $job = new JobForm();

    $form = $this->createFormBuilder($job)
        ->add("name", TextType::class, [
            "label" => "Nom :"
        ])
        ->add("firstName", TextType::class, [
            "label" => "Prénom :"
        ])
        ->add("mail", EmailType::class, [
            "label" => "E-mail :"
        ])
        ->add("telephone", TelType::class, [
            "label" => "Tel. ",
            "required" => false,
            "empty_data" => "Non Renseigné"
        ])
        ->add("url", UrlType::class, [
            "label" => "Envoyez-nous l’adresse internet vers vos réalisations",
            "required" => false,
        ])
        ->add("portfolio", FileType::class, [
            "label" => "Envoyez votre portfolio au format PDF",
            "required" => false,
            "error_bubbling" => true
        ])
        ->add("envoyer", SubmitType::class)
        ->getForm();

    $form->handleRequest($request);


    if ($form->isSubmitted() && $form->isValid()) {

        $data = $form->getData();
        $attachment = $data->portfolio;
        $mail = $data->mail;
        if (isset($attachment) || isset($data->url)) {
            $message = (new \Swift_Message())
                ->setSubject('Formulaire Job')
                ->setFrom($mail)
                ->setTo('[email protected]')
                ->setBody(
                    $this->renderView(
                        'mail/mailjob.html.twig', [
                            'data' => $data
                        ]
                    ),
                    'text/html'
                );
            if (isset($attachment)) {
                $message->attach(\Swift_Attachment::fromPath($attachment)->setFilename('portfolio.pdf')->setContentType('application/pdf'));
            }
            $mailer->send($message);

            return $this->redirectToRoute('sent');
        }
    }
    return $this->render('main/formJob.html.twig', [
        'form'=> $form->createView(),
    ]);
}

И вот мой шаблон:

    {% extends 'layout.html.twig' %}{% block title %}Jobs{% endblock %}{% block stylesheets %}<link rel = "stylesheet" type = "text/css" href = "formJobs.css"> {%  endblock %}{% block body %}<div class = "row">
    <div class = "col-lg-12">
        <h1 class = "antiqueO">Postuler</h1>

        <h2 class = "robotoR">Intitulé du poste</h2>
        <h3 class = "robotoM">Type de poste</h3>

        <p class = "robotoR">Description du poste</p>

        <div class = "trait_noir_separation"></div>

        {{ form_start(form) }}
            <div class = "col-lg-12">
                {{ form_label(form.name) }}
            </div>
            <div class = "col-lg-12">
                {{ form_errors(form.name) }}
                {{ form_widget(form.name) }}
            </div>

        <div class = "col-lg-12">
            {{ form_label(form.firstName) }}
        </div>
        <div class = "col-lg-12">
            {{ form_errors(form.firstName) }}
            {{ form_widget(form.firstName) }}
        </div>

        <div class = "col-lg-12">
            {{ form_label(form.mail) }}
        </div>
        <div class = "col-lg-12">
            {{ form_errors(form.mail) }}
            {{ form_widget(form.mail) }}
        </div>

        <div class = "col-lg-12">
            {{ form_label(form.telephone) }}
        </div>
        <div class = "col-lg-12">
            {{ form_errors(form.telephone) }}
            {{ form_widget(form.telephone) }}
        </div>

        <div class = "col-lg-12">
            {{ form_label(form.url) }}
        </div>
        <div class = "col-lg-12">
            {{ form_errors(form.url) }}
            {{ form_widget(form.url) }}
        </div>

        <div class = "col-lg-12">
            {{ form_label(form.portfolio) }}
        </div>
        <div class = "col-lg-12">
            {{ form_errors(form.portfolio) }}
            {{ form_widget(form.portfolio, {'attr': {'class': 'form-control-file', 'accept' : 'application/pdf'}})}}
        </div>
        <div>
            {{ form_widget(form.envoyer, {'attr': {'class': 'antiqueO send_button'}}) }}
        </div>
        {{ form_end(form) }}
    </div>
</div>{% endblock body %}

На самом деле у меня проблема: все мои ошибки могут быть вызваны и отображены. НО ошибка при вводе файла отказывается отображаться, даже если у меня есть ошибка на панели инструментов моего профилировщика:

Панель инструментов Profiler для ошибки размера

Панель инструментов Profiler для ошибки формата

В чем проблема в моем коде? Что блокирует отображение моей ошибки?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
0
584
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Базируется в https://symfony.com/doc/current/reference/forms/types/text.html#error-bubbling

error_bubbling type: boolean default: false unless the form is compound

If true, any errors for this field will be passed to the parent field or form. For example, if set to true on a normal field, any errors for that field will be attached to the main form, not to the specific field.

Так как вы используете этот атрибут в свойстве portfilo, ошибка отображается на

{{ form_errors(form) }}

и не в

{{ form_errors(form.portfolio) }}

Просто попробуйте удалить error_bubbling из свойства портфеля в функции formjob, и ошибка должна появиться в вашей форме.

Спасибо, ты лучший =D

Noxray 01.03.2019 12:46

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