2016-09-29 54 views
0

我正在將我的項目從Symfony 2.2升級到Symfony 3.1,並且在多次複合之後,我發現了錯誤但我無法修復它。我發現問題出在我的「形式」上,但我看不到在哪裏。無法加載類型「文本」Symfony 3表格

這裏是我的表格/ user.php的和uerbundle/Controller.php這樣

謝謝

大衛

<?php 
 

 
namespace Admin\UserBundle\Controller; 
 

 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
 
use Symfony\Component\HttpFoundation\Response; 
 
use Admin\UserBundle\Entity\User; 
 
use Admin\UserBundle\Form\UserType; 
 

 
class DefaultController extends Controller 
 
{ 
 
    const bundleName = 'AdminUserBundle'; 
 
    const entityName = 'User'; 
 
    const indexRoute = 'admin_user'; 
 
    const repository = 'Admin\UserBundle\Entity\User'; 
 

 
    public function indexAction() 
 
    { 
 
     $repository = $this->getDoctrine()->getManager() 
 
       ->getRepository('AdminUserBundle:User'); 
 

 
     $usersList = $repository->findAll(); 
 

 
     return $this 
 
       ->render('AdminUserBundle:Default:index.html.twig', 
 
         array('usersList' => $usersList, 'description' => 'Liste des utilisateurs')); 
 
    } 
 

 
    public function addAction() 
 
    { 
 
     return $this->formAction(new User(), 'Ajouter un utilisateur'); 
 
    } 
 

 
    public function modifyAction($id) 
 
    { 
 
     // récupération des données via l'id de l'utilisateur sélectionné 
 
     $user = $this->getDoctrine() 
 
       ->getRepository(self::repository)->find($id); 
 
    
 
     return $this->formAction($user, 'Modifier un utilisateur'); 
 
    } 
 

 
    private function formAction($user, $description) 
 
    { 
 
     $form = $this->createForm(UserType::class, $user); 
 

 
     // récupération de la requête 
 
     $request = $this->get('request'); 
 

 
     // vérification du type de la requete 
 
     if ($request->getMethod() == 'POST') { 
 
      // execution de la requete 
 
      $form->bind($request); 
 

 
      // vérification de la validité des données saisies 
 
      if ($form->isValid()) { 
 
       // enregistrement de l'objet $user dans la BD 
 
       $em = $this->getDoctrine()->getManager(); 
 
       $em->persist($user); 
 
       $em->flush(); 
 

 
       // redirection vers la page de visualisation de la liste des utilisateurs 
 
       return $this->redirect($this->generateUrl(self::indexRoute)); 
 
      } 
 
     } 
 

 
     // - si requete de type GET, donc le visiteur vient d'arriver sur la page et veut voir le formulaire 
 
     // - si requete de type POST, mais le formulaire n'est pas valide, donc on l'affiche de nouveau 
 
     return $this 
 
       ->render('AdminUserBundle:Default:form.html.twig', 
 
         array('form' => $form->createView(), 
 
           'description'=> $description, 
 
           'index_route' => self::indexRoute)); 
 
    } 
 
    
 
    public function changeStatusAction($id) 
 
    { 
 
     // récupération des données via l'id de l'utilisateur sélectionné 
 
     $user = $this->getDoctrine() 
 
       ->getRepository('Admin\UserBundle\Entity\User')->find($id); 
 

 
     // inversion de la valeur de l'attribut "enabled" de l'utilisateur 
 
     $user->setEnabled(!$user->isEnabled()); 
 

 
     // enregistrement de notre objet $user dans la base de données 
 
     $em = $this->getDoctrine()->getManager(); 
 
     $em->persist($user); 
 
     $em->flush(); 
 

 
     // redirection vers la page de visualisation de la liste des utilisateurs 
 
     return $this->redirect($this->generateUrl(self::indexRoute)); 
 
    } 
 

 
}

<?php 
 

 
namespace Admin\UserBundle\Form; 
 

 
use Symfony\Component\Form\FormBuilderInterface; 
 
use FOS\UserBundle\Form\Type\RegistrationFormType; 
 

 
class UserType extends RegistrationFormType 
 
{ 
 
    public function __construct() 
 
    { 
 
     parent::__construct('Admin\UserBundle\Entity\User'); 
 
    } 
 

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

 
     $builder->add('acronym', 'text') 
 
       ->add('firstname', 'text') 
 
       ->add('lastname', 'text') 
 
       ->add('roles', 'choice', 
 
         array(
 
           'choices' => array(
 
             'ROLE_PROJECT_MANAGER' => 'Chef de projet', 
 
             'ROLE_USER' => 'Contributeur', 
 
             'ROLE_OPERATOR' => 'Exploitant', 
 
             'ROLE_ADMIN' => 'Administrateur'), 
 
           'multiple' => true, 'expanded' => true)); 
 
    } 
 

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

+1

[第91行中的vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php中的[無法加載類型「文本」]的可能副本](http://stackoverflow.com/questions/33160763/could-not -load-type-text-in-vendor-symfony-symfony-src-symfony-component-form) – qooplmao

+1

我沒有使用新的symfony,但我知道他們改變了窗體。您可能需要爲文本使用類似TextType :: class的內容。 – Eli

回答

-2

從中可以在這裏找到的文檔:http://symfony.com/doc/current/forms.html#building-the-form

你必須使用新的FormType類和使用類名稱作爲類型:

// src/AppBundle/Controller/DefaultController.php 
namespace AppBundle\Controller; 

use AppBundle\Entity\Task; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 

class DefaultController extends Controller 
{ 
    public function newAction(Request $request) 
    { 
     // create a task and give it some dummy data for this example 
     $task = new Task(); 
     $task->setTask('Write a blog post'); 
     $task->setDueDate(new \DateTime('tomorrow')); 

     $form = $this->createFormBuilder($task) 
      ->add('task', TextType::class) 
      ->add('dueDate', DateType::class) 
      ->add('save', SubmitType::class, array('label' => 'Create Task')) 
      ->getForm(); 

     return $this->render('default/new.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 
} 
+0

好的,謝謝。我只是忘了這2行:使用Symfony \ Component \ Form \ Extension \ Core \ Type \ IntegerType; 使用Symfony \ Component \ Form \ Extension \ Core \ Type \ TextType; – dapebat

1

嘗試使用

->add('task', TextType::class) 

而不是

->add('task', 'text') 
相關問題