您可以使用您自己的 FormType 类来完成,如下所示:
class UserType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname')
->add('username')
->add('password')
;
}
...
}
在你的控制器中你会这样写:
/**
* Displays a form to create a new User entity.
*
* @Method("GET")
* @Template()
*/
public function newAction()
{
$entity = new User();
$form = $this->createCreateForm($entity);
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
/**
* @Method("POST")
* @Template("CoreBundle:User:new.html.twig")
*/
public function createAction(Request $request)
{
$entity = new User();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('user_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
/**
* Creates a form to create a User entity.
*
* @param User $entity The entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createCreateForm(User $entity)
{
$form = $this->createForm(new UserType(), $entity, array(
'action' => $this->generateUrl('user_create'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Create'));
return $form;
}
并且在你的实体用户中你需要添加一个约束来确保你的用户名是唯一的:
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity("username")
*/
class Author{
...
}
这样,如果表单无效或使用了用户名字段,您将呈现带有错误的用户表单。
您可以在http://symfony.com/doc/current/reference/constraints.html 中阅读有关约束的更多信息
如果您想管理您的用户帐户,我建议您查看 FOSUserBundle。 https://github.com/FriendsOfSymfony/FOSUserBundle