[Symfony] Formular-Fehlermeldungen & Asserts

HighTec

Lieutenant
Registriert
Sep. 2006
Beiträge
761
Guten Tag liebe Forengemeinde. Auf Empfehlen habe ich angefangen mich mit dem Symfony Framework zu beschäftigen und bin bisher positiv angetan.

Nun habe ich eine kleine Hürde bei der ich nicht weiter komme und bei der mir auch die Doku nicht unbedingt weiter geholfen hat.

Ich erstelle ein Formular, mit dessen Eingaben ich ein Objekt befülle und via Doctrine in die Datenbank schreibe.
So weit so gut funktioniert auch alles und ich bekomme auch eine Fehlermeldung bei fehlerhaften Eingaben. Soweit in Ordnung.
Nur störe ich mich nun an der Fehlermeldung selbst. In der entsprechenden Objekt-Klasse habe ich über Symfonys Validator eine Fehlernachricht definiert:

PHP:
 /**
     * @var \DateTime
     *
     * @ORM\Column(name="birthday", type="date", nullable=true)
     *
     *  @Assert\Date(
     *     message = "Bitte ein gültiges Datum eingeben"
     * )
     */
    private $birthday;

Die FormType-Klassen-Methode sieht so aus:

PHP:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('mainName')            
            ->add('birthday', BirthdayType::class, array(
                'widget' => 'single_text',
            ))
            ->add('Erstellen', SubmitType::class);

    }
    
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\UserChild'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'newChild';
    }

Gebe ich nun im Formular aber etwas Fehlerhaft ein bekomme ich die Fehlermeldung "Dieser Wert ist nicht gültig." in einer unsortierten Liste ausgegeben.

Wo genau hat er diese Fehlermeldung her?
Und vor allem: Wie definiere ich nun meine eigene Input-spezifische Fehlermeldung?
Müsste er diese nicht von dem "Assert" aus der Objekt-Klasse nehmen?

Vielen Dank schon mal

Gruß

Christian
 
Für den Formdatentyp "BirthdayType" gibt im Formbuilder eine "invalid_message" Option:

PHP:
->add('birthday', BirthdayType::class, array(
    'widget' => 'single_text',
    'invalid_message' => 'Bitte ein gültiges Datum eingeben'
))

http://symfony.com/doc/current/reference/forms/types/birthday.html#invalid-message-parameters



Falls du mit Translations arbeitest:

PHP:
// src/AppBundle/Entity/Author.php

 /**
  * @Assert\NotBlank(message = "author.name.not_blank")
  */
    public $name;

PHP:
# app/Resources/translations/validators.en.yml

author.name.not_blank: Please enter an author name.

https://symfony.com/doc/current/validation/translations.html
 
Hey erstmal vielen Dank für deine Antwort.
Ja die Möglichkeiten die du aufgezeigt hast sind mir auch schon aufgefallen und langfristig werde ich sehr wahrscheinlich mit translations arbeiten.
Allerdings ist es die Sache die mich verwundert:
Ich habe in den Asserts ja bereits eine Fehlermeldung angegeben, nur halt nicht im Format für Übersetzungen.
Müsste er in meinem Fall nicht dennoch schon mal die Nachricht aus de Asserts übernehmen so wie er es bei den Translations dann auch machen würde?

PHP:
/**
     * @var \DateTime
     *
     * @ORM\Column(name="birthday", type="date", nullable=true)
     *
     *  @Assert\Date(
     *     message = "Bitte ein gültiges Datum eingeben"
     * )
     */
    private $birthday;

Angegeben ist ja eine Fehlermeldung. Im Fehlerfall übernimmt das System diese aber nicht, sondern generiert eine eigene.
 
Zurück
Oben