Php Symfony2 Uniquentity不工作:引发数据库异常
我有一个用户类,如下所示:Php Symfony2 Uniquentity不工作:引发数据库异常,php,symfony,unique-constraint,Php,Symfony,Unique Constraint,我有一个用户类,如下所示: /** * User * * @ORM\Table() * @ORM\Entity * @UniqueEntity("username") */ class User implements UserInterface { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id
/**
* User
*
* @ORM\Table()
* @ORM\Entity
* @UniqueEntity("username")
*/
class User implements UserInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=30, unique=true)
*/
private $username;
...
正如您所猜测的,我希望保持用户名的唯一性。当我尝试注册一个与以前的用户名重复的新用户时,我得到一个db异常:
An exception occurred while executing 'INSERT INTO User (username, hashedpassword, email) VALUES (?, ?, ?)' with params ["xx", "$2y$10$7rrY0tw0eG8ui7hRkpGI..8Wf16DP1fQMLymaOmHnbZsBw6M1uY.i", "ddsds@u.com"]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'xx' for key 'UNIQ_2DA17977F85E0677'
我想问题可能出在我的注册控制器上。我正在使用上给出的那个
相关位:
class AccountController extends Controller
{
public function registerAction()
{
$registration = new Registration();
$form = $this->createForm(new RegistrationType(), $registration, array(
'action' => $this->generateUrl('account_create'),
));
return $this->render(
'RezialRezialBundle:Account:register.html.twig',
array('form' => $form->createView())
);
}
public function createAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new RegistrationType(), new Registration());
$form->handleRequest($request);
if ($form->isValid()) {
$registration = $form->getData();
//should I manually check for unicity here?
$em->persist($registration->getUser());
$em->flush();
//The following 3 lines make the user automatically login
//upon successfull registration!
$user = $registration->getUser();
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
return $this->redirectToRoute('homepage');
}
return $this->render(
'RezialRezialBundle:Account:register.html.twig',
array('form' => $form->createView())
);
}
}
有什么想法吗?您没有忘记注册类的$user属性上的@Assert\Valid()注释吗
此约束用于对以下对象启用验证:
作为属性嵌入到正在验证的对象上。这允许你
验证对象及其关联的所有子对象
链接:试试这个:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="user")
* @UniqueEntity(fields="username", message="Username is already taken.")
*/
class User
{
/**
* @ORM\Column(name="username", type="string", length=30, unique=true)
*/
protected $username;
}
我已经忘了,现在才加上。但是,还是一样的db例外:(啊!真不敢相信。它很管用,老兄!我第一次试着在第一条评论行键入/*而不是/**。显然这很重要。哈哈。谢谢!