我正在将我的项目从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';
}
}
答案 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(),
));
}
}