【发布时间】:2016-09-29 14:04:40
【问题描述】:
我正在将我的项目从 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';
}
}
【问题讨论】:
-
我没有用过新的 symfony 但我知道他们改变了形式。您可能需要为您的文本使用类似 TextType::class 的内容。
标签: php forms symfony fosuserbundle