Как отобразить ошибку в моем входном файле на Symfony 4? - PullRequest
0 голосов
/ 01 марта 2019

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

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

В моей сущности у меня есть 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('nicolas.trinquet@laposte.net')
                ->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 %}

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

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

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

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

1 Ответ

0 голосов
/ 01 марта 2019

На основе https://symfony.com/doc/current/reference/forms/types/text.html#error-bubbling

error_bubbling тип: логическое значение по умолчанию: false, если форма не составная

Если true, любые ошибки для этого поля будут переданы в родительское полеили форма.Например, если для обычного поля установлено значение true, любые ошибки для этого поля будут прикрепляться к основной форме, а не к конкретному полю.

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

{{ form_errors(form) }}

, а не в

{{ form_errors(form.portfolio) }}

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

...