2016-04-06 20 views
0

Ich habe ein Unternehmen mit diesem Code festgelegtSymfony prüft nicht auf iphone

/** 
* @Assert\Length(
*  min = 20, 
*  max = 2000, 
*  minMessage = "message.min_length", 
*  maxMessage = "message.max_length" 
*) 
*/ 
protected $message; 

Wenn ich einen Desktop Navigator bin mit es, wenn die Nachricht zu senden, weigert sich weniger als 20, aber wenn auf dem iPhone oder Tablet (Android) die Nachricht wird gesendet, auch leer. Das Feld ist ein Textfeld. Irgendwelche Ideen?

+0

Bitte Zeigen Sie den Code an, mit dem Sie Ihr Objekt validieren. – xabbuh

+0

Es gibt keinen Code. Für mich die Validierungs-ID über die @ Assert und Symfony-Mechanismen, nein? – Laurent

+0

Nun, die Frage ist, ob Sie jemals den Validator aufrufen (zum Beispiel durch '$ form-> isValid()') oder wenn Sie sich einfach auf die clientseitige Validierung verlassen. – xabbuh

Antwort

1

Update:

Nach der Symfony Dokumentation, behaupten Länge daher NULL & leere Strings als gültig, geht davon aus, warum es passiert (http://symfony.com/doc/current/reference/constraints/Length.html#min).

Bitte fügen Sie Assert \ NotBlank() und dies wird die leeren Strings

validieren -

Was die symfony-Formular-Builder tun wird, ist die Formularvalidierung Optionen, um die Formularelemente hinzufügen, zum Beispiel:

<input name="my_field" required> 

Ein Desktop-Browser wird bestätigen, dass dieses Formularelement erforderlich ist (Client-Seite) & wenn leer, verhindert das Formular abgeschickt wird. Auf Mobilgeräten werden die Formulare nicht automatisch validiert (ich muss noch einen Grund dafür finden ..?). Daher müssen Sie eine JavaScript-Formularüberprüfung hinzufügen, um zu verhindern, dass das Formular gesendet wird, wenn es auf Mobilgeräten/Tablets ungültig ist Geräte.

Bitte stellen Sie sicher, dass das Formular korrekt auf die Entity-Klasse zugeordnet ist:

// AppBundle/Form/EntityForm.php 

<?php 

namespace AppBundle\Form; 

class EntityForm extends AbstractType 
{ 
    // ... 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => 'AppBundle\Entity\MyEntity', 
     ]); 
    } 
} 

Um sicherzustellen, dass symfony Anmerkungen validiert, fügen Sie diese zu Ihrer app/config/config.yml

# app/config/config.yml 
framework: 
    validation: { enable_annotations: true } 
+0

Danke für Ihre Antwort, aber die "Assert" soll nicht die Validierung von der Server-Seite tun? Also zurück zum Benutzer, wenn die Validierung nicht gut ist? – Laurent

+0

Also, ich habe überprüft und alles oben ist bereits in meinem Code – Laurent

+0

Könnten Sie uns einige Codebeispiele aus Ihrer Codebasis zur Verfügung stellen, damit wir sehen können, was bisher soweit gemacht wurde? – LMS94