2016-05-31 8 views
0

Ich versuche, den aktuellen Benutzer in einem benutzerdefinierten Formularfeldtyp zu erhalten.Abfangbarer Fataler Fehler: Das an UserBundle Form UserType :: __ construct() übergebene Argument 2 muss eine Instanz sein?

Meine Formtype

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; 

class UserType extends AbstractType { 

    protected $doctrine; 
    protected $tokenStorage; 

public function __construct($doctrine,TokenStorageInterface $tokenStorage) 
{ 
    $this->tokenStorage = $tokenStorage; 
    $this->doctrine = $doctrine; 
} 


public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

$user = $this->tokenStorage->getToken()->getUser(); 
    $builder 
    ->setAction($options['data']['url']) 
    ->setMethod('GET') 
      ->add('userType', 'choice', array('choices' => array(
       'userType_p' => $pId, 
       'userType_t' => $tId), 
       'choices_as_values' => true, 'label' => 'Usertype ', 
       'expanded' => true, 'multiple' => true, 
       'translation_domain' => 'User',))........ 
       .... 

Hier sind mein Service:

user.form.token: 
    class: UserBundle\Form\UserType 
    arguments: ['@security.token_storage'] 
    tags: 
     - { name: form.type } 

im Controller mir die Form wie dieser Aufruf:

$form = $this->createForm(new UserType($em,$this->get('user.form.token')), $data.... 

ich diese folgende Störung erhalten:

Catchable Fatal Error: Argument 2 passed to UserBundle\Form\UserType::__construct() must implement interface Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface, none given, called in......

Antwort

0

Die Methodensignatur UserType::__construct hat hier zwei Parameter, und Sie geben nur einen in Ihrer Servicedeklaration ($doctrine), daher der Fehler. Wenn Sie noch Lehre in Form Typ benötigen, sollten Sie es auch passieren:

user.form.token: 
    class: UserBundle\Form\UserType 
    arguments: ['@doctrine', '@security.token_storage'] 
    tags: 
    - { name: form.type } 

Auch sieht aus wie du bist nicht die Form der Erstellung selbst richtig, statt der Instanziierung die Art selbst, sollten Sie nur passieren seine Klassenname, wie explained by Christophe Coevoet:

$form = $this->createForm(UserType::class, $data); 
Verwandte Themen