2017-03-23 2 views
1

Ich habe eine Entity „Element“ mit einer ManyToOne Beziehung mit Liste (eine Liste mehr Elemente aufweisen kann)Validierung mit ManyToOne

/** 
* @ORM\ManyToOne(targetEntity="Liste") 
*/ 
private $list; 

Wie kann ich ein Formular zu validieren ein neues Element hinzuzufügen, mit nur der Weitergabe ID der Liste und nicht die Liste selbst? (Die Liste muss vorhanden sein)

Antwort

0

Sie müssen das Formularfeld hinzufügen, mit Entitätstyp wie folgt aus:

->add('list', EntityType::class, [ 
     'choice_label' => 'my test title' 
    ]) 
0

Sie haben durch diese Schritte folgen:

1) zuordnen/Set Entitätsklasse in Form

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
     'data_class' => 'CoreBundle\Form\Type\YourEntity', 
    ]) 
} 

2) benutzerdefinierte Validierung auf YourEntity erstellen

@Assert\CheckExistingList() 

class YourEntity 
{ 
    public function __construct() 
} 

3) Erstellen Sie eine neue Validierungsdatei CheckExistingListValidator.php und schreiben Sie Ihre Validierungslogik in die unten stehende Funktion.

public function validate(Constraint $constraint) 
{ 
    // logic here. 
} 

Also, wenn Ihr Formular dieser Validierung vorlegen wird dann aufgerufen werden soll und die Fehlermeldung zeigt in der Formularfehlerliste.

5

In den alten Tagen (vor 2.8) konnten wir das Flag cascade_validation setzen, das dann alle untergeordneten Objekte validieren würde. Dies war im besten Fall Treffer und Miss.

Das gegangen, der richtige Weg ist, die folgenden (beachten Sie die valid Constraint) zu tun:

from the docs

use use Symfony\Component\Validator\Constraints as Assert; 

class stuff 
{ 
    // .... 

    /** 
    * @ORM\ManyToOne(targetEntity="Liste") 
    * @Assert\Valid 
    */ 
    private $list; 

    // .... 
} 

dies wird das Framework den Aufruf alle Validatoren zwingen, die Sie auf die verbundene Einrichtung haben .

Dies ist erhältlich von Symfony 2.7