无法加载类型“文本”Symfony 3表单

时间:2016-09-29 14:04:41

标签: php forms symfony fosuserbundle

我正在将我的项目从Symfony 2.2升级到Symfony 3.1,经过多次修复后,我发现并发现错误,但我无法修复它。我看到问题出在我的“形式”上,但我无法看到。

这是我的表单/ 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';
    }
}

2 个答案:

答案 0 :(得分:2)

尝试使用

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

而不是

->add('task', 'text')

答案 1 :(得分:-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(),
        ));
    }
}