Я работаю над своим первым проектом 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 для ошибки формата
В чем проблема в моем коде? Что блокирует отображение моей ошибки?






Базируется в 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