8

Ich habe SonataUserBundle nach den Dokumenten installiert und alles funktioniert gut. Nur dass ich keine benutzerdefinierten Validierungsregeln hinzufügen kann.Hinzufügen von benutzerdefinierten Validierungsregeln zu SonataUserBundle

Ich verstehe, dass die neuen Regeln zu einer neuen Validierungsgruppe hinzugefügt werden sollen und dann config.yml aktualisiert wird, um SonataUserBundle (oder FosUserBundle) mitzuteilen, dass die neuen Regeln zur Validierungssequenz hinzugefügt werden sollen.

ich dies versucht haben, auf verschiedene Weise, aber die neuen Regeln scheinen einfach nicht gar abgeholt zu werden ...

Hier ist die Konfiguration Ich verwende ...

(Um dieses Beispiel zu verwenden, versuche ich nur, einem neuen foo-Feld eine NotNull-Einschränkung hinzuzufügen. In Wirklichkeit würde ich gerne so viel Arbeit sehen und dann weitere Validierungsregeln hinzufügen.)

Ich habe das foo hinzugefügt Feld zu Application\Sonata\UserBundle\Resources\config\doctrine\User.orm.xml und das alles funktioniert gut, Hinzufügen der Foo-Feld in die User.php Klasse.

# in Application\Sonata\UserBundle\Resources\config\doctrine\User.orm.xml 
... 
<field name="foo" type="string" length="100" nullable="true" /> 
... 

In User.php haben wir das Hotel mit seinen Getter und Setter:

// In Application\Sonata\UserBundle\Entity\User.php 
// ... 
/** 
* @var string 
*/ 
private $foo; 

/** 
* Set foo 
* 
* @param string $foo 
* @return User 
*/ 
public function setFoo($foo) 
{ 
    $this->foo = $foo; 

    return $this; 
} 

/** 
* Get foo 
* 
* @return string 
*/ 
public function getFoo() 
{ 
    return $this->foo; 
} 
// ... 

Ich habe hinzugefügt, dann die neue Gültigkeitsregel zu meinem Projekt bestehenden validation.yml Datei:

Application\Sonata\UserBundle\Entity\User: 
    properties: 
     foo: 
      - NotNull: { groups: [CustomGroup] } 

(Beachten Sie, dass ich auch versucht habe, eine Datei namens validation.yml und validation.xml in Application \ Sonata \ UserBundle \ Resources \ config zu erstellen, aber das schien keinen Unterschied zu machen.)

In config.yml ich SonataUserBundle sagen meine neue CustomGroup für die Validierung zu verwenden:

sonata_user: 
    # ... 
    profile: 
     form: 
      validation_groups: [CustomGroup, Profile, Default] 

(Beachten Sie, dass ich auch die Validierungsgruppe an der fos_user Ebene versucht haben, das Hinzufügen (fos_user.profile.form.validation_groups: [CustomGroup, Profile, Default]) und das Hinzufügen in sonata_user.profile.register.form.validation_groups: [CustomGroup, Registration, Default], aber . ohne Erfolg)

Und der Vollständigkeit halber, hier hinzugefügt das Feld UserAdmin.php:

// In Application\Sonata\UserBundle\Admin\UserAdmin.php 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->with('General') 
      // ... 
      ->add('foo',  null, array('required' => false)) 
     ->end() 
    ; 
} 

Also ... was habe ich verpasst? Ist das Formular UserAdmin nicht das gleiche wie das Formular 'Profil'? (Obwohl ich auch versucht habe, die Registrierungsformulareinstellungen zu aktualisieren) Oder setze ich die Validierungsregeln woanders ein?

Hoffentlich habe ich gerade etwas Kleines verpasst!

Vielen Dank im Voraus,

C

+0

Ich muss hinzufügen, eigentlich das gleiche Problem. Ich habe eine Reihe verschiedener "Lösungen" ausprobiert, die ich finden konnte, aber nichts funktioniert. Konntest du etwas herausfinden? –

+0

Das gleiche Problem für mich. Hier ein Ticket erstellt: https://github.com/sonata-project/SonataUserBundle/issues/611 –

+0

Wenn Ihre Anwendung \ Sonata \ UserBundle \ Resources \ config \ validation.yml (oder XML) einen Fehler enthält, beschweren Sie sich über die Anwendung darüber? –

Antwort

6

Die Admin Form ist NICHT das gleiche wie die Profilform.


Um herauszufinden, was eine Form Validierungsgruppe Open up symfony Profiler

  1. posten Sie Ihre Form in der Entwicklungsumgebung (app_dev verwendet.php)
  2. öffnen http://127.0.0.1:8000/app_dev.php/_profiler/
  3. die letzten 10 Einreichungen anzeigen.
  4. klicken Sie auf die POST-Methode Formular auf
  5. Klick FORMS
  6. in Bestanden Optionen oder gelöst Optionen (in diesem Fall die Sonate Admin-Benutzer erstellen Form) vorgelegt wurde, sollten Sie sehen, was validation_groups eingestellt ist.

Um kundenspezifische Validierungsregeln auf die Admin des SonataUserBundle hinzufügen Erstellen oder Bearbeiten von Benutzer, werden Sie folgendes tun müssen:

, wenn Sie bei https://github.com/sonata-project/SonataUserBundle/blob/master/Admin/Model/UserAdmin.php Hier finden Sie die validation_groups für die aussehen sehen user admin sind fest in Registration (new) oder Profile (edit) kodiert.

Sie haben 2 Möglichkeiten.

A) Fügen Sie einfach Ihre Validierungsregeln zu Ihrem Projekt validation.yml hinzu und verwenden Sie die vorhandene Registrierungsvalidierungsgruppe.

Application\Sonata\UserBundle\Entity\User: 
    properties: 
     foo: 
      - NotNull: { groups: [Registration, Profile] } 

B) außer Kraft setzen Admin :: getFormBulder() Ihre benutzerdefinierten Validierungsgruppe

// In Application\Sonata\UserBundle\Admin\UserAdmin.php 
public function getFormBuilder() 
{ 
    $this->formOptions['data_class'] = $this->getClass(); 

    $options = $this->formOptions; 
    $options['validation_groups'] = (!$this->getSubject() || is_null($this->getSubject()->getId())) ? ['CustomGroup','Registration'] : 'Profile'; 

    $formBuilder = $this->getFormContractor()->getFormBuilder($this->getUniqid(), $options); 

    $this->defineFormBuilder($formBuilder); 

    return $formBuilder; 
} 
+0

Sie, Sir, sind ein Gentleman und ein Gelehrter. Vielen Dank! – caponica

Verwandte Themen