symfony2 form-Validierung und-Einschränkung

Ich habe gerade ein Formular erstellt, dass zu "fangen" Daten übertragen auf "Anwender-Objekt" und speichern Sie es auf DB.

In Ordnung, für das tun, ich Folgen Sie diesen Schritten:

  1. Erstellen Sie ein Benutzer-Objekt
  2. Erstellen Sie ein UserRepository make it hartnäckig und Holen es (durch Entity Manager)
  3. Erstellen Sie eine Klasse "Karte" die form
  4. Eine route erstellen und eine Vorlage für das Rendern der ganzen Sache

Also Schritt über die ersten zwei von denen, und lasst uns gemeinsam sehen, der Dritte Schritt

<?php
namespace Sestante\UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\MinLength;
use Symfony\Component\Validator\Constraints\Collection;

class AddUserType extends AbstractType
{
    public function BuildForm(FormBuilder $builder, array $options)
    {
        $builder->add('username','text')
                ->add('email','email')
                ->add('id','hidden')
                ->add('password','text')
                ;
    }

    public function getName()
    {
        return 'AddUser';
    }

Dies ist ein Teil der Klasse, die ich erstellt habe für "form Griff".

Natürlich möchte ich hinzufügen, eine Art von Validierung zu meiner form, und folgende symfony2 Buch ich habe dies getan,

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array(
        'username'=> new MinLength(4),
        'email'=>new Email(array('message'=>'invalid email address')),
    ));

    return array(
        'data_class' => 'Sestante\UserBundle\Entity\User',
        'validation_constraint' => $collectionConstraint
    );
}

So weit ich verstanden habe, Einschränkungen wird geprüft, ob die $form->bindRequest(...) oder ->bind(...) Anrufe.

So, in mein controller, ich habe dies getan,

public function insertAction(Request $request)
{
   if($request->getMethod() == 'POST'){
       $em = $this->getDoctrine()->getEntityManager();
       $user = $em->getRepository('SestanteUserBundle:User');
       $userObj = new User();
       $userObj->setSalt('prova');
       $parameters = $request->request->get('AddUser');
       $parameters['password'] = sha1($parameters['password']);
       $userObj->setGroups($em->getRepository('SestanteUserBundle:Groups')->find(3));
       $form = $this->createForm(new AddUserType(), $userObj);
       $logger = $this->get('logger');
       $logger->info('PROVA: '.gettype($parameters));
       $form->bind($parameters); /* al posto che fare un bind della form, faccio un bind normale con i parametri presi dalla post e modificati
                                 vedi la password che deve subire uno sha1 */
       $em->persist($userObj);
       $em->flush();
       return $this->redirect($this->generateUrl('SestanteUserBundle_homepage'));
   }

Aber als ich das Formular Absenden, werde ich haben zu kämpfen mit diesem Fehler

Erwartet argument vom Typ array oder Überfahrbar und ArrayAccess, Objekt
angesichts

Das seltsamste ist, dass die nur zwei beteiligte Objekt in diesem Vorgang (binden argument-und constraint-Sammlungen) sind des angeforderten Typs.
Also ich weiß nicht, wie zu überholen diese.

Irgendeine Idee?

InformationsquelleAutor DonCallisto | 2012-06-27
Schreibe einen Kommentar