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:
- Erstellen Sie ein Benutzer-Objekt
- Erstellen Sie ein UserRepository make it hartnäckig und Holen es (durch Entity Manager)
- Erstellen Sie eine Klasse "Karte" die form
- 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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie mit so etwas wie dies:
Einige andere Dinge:
Passwort im controller.
Edit:
Du hast diese Ausnahme, weil Sie nicht verwenden können, die
validation_constraint
option in einer form, die der Umgang mit einem Objekt.Diese option kann nur verwendet werden, mit einem array von Daten.
validation_constraint
option in einer form, die... Bearbeiten ein Objekt. Es funktioniert nur mit einem array.validation_constraint
verwendet werden, mit einer Klasse, ist offensichtlich abgebildet auf ein Objekt. Wenn Sie das Buch (Sie können ermittelt werden in dieser url werfen Sie einen Blick auf die Seiten 149-150validation_constraint
option kann nur verwendet werden, mit einem array von Daten...