Symfony2:FOSUserBundle 删除操作错误
Symfony2: FOSUserBundle Delete Action Error
对 Symfony2 相当陌生;我现在使用 FOSUserBundle 作为我的用户提供者。由于它不提供用于删除操作的控制器,因此我编写了自己的控制器:
/**
* Delete user
*
* @param integer $id
*
* @Route("/delete/{id}")
*
* @return RedirectResponse
*/
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
$um = $this->get('fos_user.user_manager');
$user = $um->findUserBy(array(
'id' => $id
)
);
$em->remove($user);
$em->flush();
return new RedirectResponse("star9988_user_user_index");
}
并在我的模板路径中添加了 link:
<a href="{{ path('star9988_user_user_delete', {'id': user.id}) }}">
我最初尝试传入 ObjectManager,通过 ID 查询 User 对象,然后使用 deleteUser 方法删除它,但由于某种原因,它不允许我使用通常的构造函数注入获取 ObjectManager方法。
因此,我求助于调用 EntityManager,并在我的 $user 对象上调用它的 remove() 方法。
结果很奇怪:当我用SequelPro检查我的数据库时,我注意到指定的用户对象确实被删除了。但是,浏览器returns这个错误:
EntityManager#remove() expects parameter 1 to be an entity object,
NULL given.
如有任何帮助,我们将不胜感激。
编辑:
I have changed my code to the following:
/**
* Delete user
*
* @param integer $id
*
* @Route("/delete/{id}")
*
* @return RedirectResponse
*/
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
/** @var \Star9988\ModelBundle\Entity\User $user */
$user = $this->getDoctrine()->getRepository('ModelBundle:User')->find($id);
$em->remove($user);
$em->flush();
return new RedirectResponse("star9988_user_user_index");
}
奇怪的是,我得到了相同的结果:该实体已从数据库中删除。
我的路由好像因为某些原因没有传递参数。
DEBUG - SELECT t0.username AS username1, t0.username_canonical AS
username_canonical2, t0.email AS email3, t0.email_canonical AS
email_canonical4, t0.enabled AS enabled5, t0.salt AS salt6,
t0.password AS password7, t0.last_login AS last_login8, t0.locked AS
locked9, t0.expired AS expired10, t0.expires_at AS expires_at11,
t0.confirmation_token AS confirmation_token12,
t0.password_requested_at AS password_requested_at13, t0.roles AS
roles14, t0.credentials_expired AS credentials_expired15,
t0.credentials_expire_at AS credentials_expire_at16, t0.id AS id17,
t0.FirstName AS FirstName18, t0.LastName AS LastName19, t0.creditLimit
AS creditLimit20, t0.creditAvailable AS creditAvailable21,
t0.accountBalance AS accountBalance22, t0.rebate AS rebate23,
t0.parent AS parent24 FROM StarUsers t0 WHERE t0.id = ? LIMIT 1
尝试将 id 设置为必需参数,如 this example:
/**
* @Route("
* path = "/delete/article/{id}",
* name = "blog_admin_delete_article"
* requirements = { "id" = "\d+" },
* methods = { "GET" }
* )
*/
public function deleteArticleAction($id) { /* ... */ }
您还可以查看用户加载的代码:
/** @var \Star9988\ModelBundle\Entity\User $user */
$user = $this->getDoctrine()->getRepository('ModelBundle:User')->find($id);
if (!$user instanceof User) {
throw new NotFoundHttpException('User not found for id ' . $id);
}
希望对您有所帮助。
当你得到用户管理器时
$um = $this->container->get('fos_user.user_manager')
您可以在获得用户操作后使用删除,如下所示:
$um->deleteUser($user);
但您需要先检查用户是否不为空。
对 Symfony2 相当陌生;我现在使用 FOSUserBundle 作为我的用户提供者。由于它不提供用于删除操作的控制器,因此我编写了自己的控制器:
/**
* Delete user
*
* @param integer $id
*
* @Route("/delete/{id}")
*
* @return RedirectResponse
*/
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
$um = $this->get('fos_user.user_manager');
$user = $um->findUserBy(array(
'id' => $id
)
);
$em->remove($user);
$em->flush();
return new RedirectResponse("star9988_user_user_index");
}
并在我的模板路径中添加了 link:
<a href="{{ path('star9988_user_user_delete', {'id': user.id}) }}">
我最初尝试传入 ObjectManager,通过 ID 查询 User 对象,然后使用 deleteUser 方法删除它,但由于某种原因,它不允许我使用通常的构造函数注入获取 ObjectManager方法。
因此,我求助于调用 EntityManager,并在我的 $user 对象上调用它的 remove() 方法。
结果很奇怪:当我用SequelPro检查我的数据库时,我注意到指定的用户对象确实被删除了。但是,浏览器returns这个错误:
EntityManager#remove() expects parameter 1 to be an entity object, NULL given.
如有任何帮助,我们将不胜感激。
编辑:
I have changed my code to the following:
/**
* Delete user
*
* @param integer $id
*
* @Route("/delete/{id}")
*
* @return RedirectResponse
*/
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
/** @var \Star9988\ModelBundle\Entity\User $user */
$user = $this->getDoctrine()->getRepository('ModelBundle:User')->find($id);
$em->remove($user);
$em->flush();
return new RedirectResponse("star9988_user_user_index");
}
奇怪的是,我得到了相同的结果:该实体已从数据库中删除。
我的路由好像因为某些原因没有传递参数。
DEBUG - SELECT t0.username AS username1, t0.username_canonical AS username_canonical2, t0.email AS email3, t0.email_canonical AS email_canonical4, t0.enabled AS enabled5, t0.salt AS salt6, t0.password AS password7, t0.last_login AS last_login8, t0.locked AS locked9, t0.expired AS expired10, t0.expires_at AS expires_at11, t0.confirmation_token AS confirmation_token12, t0.password_requested_at AS password_requested_at13, t0.roles AS roles14, t0.credentials_expired AS credentials_expired15, t0.credentials_expire_at AS credentials_expire_at16, t0.id AS id17, t0.FirstName AS FirstName18, t0.LastName AS LastName19, t0.creditLimit AS creditLimit20, t0.creditAvailable AS creditAvailable21, t0.accountBalance AS accountBalance22, t0.rebate AS rebate23, t0.parent AS parent24 FROM StarUsers t0 WHERE t0.id = ? LIMIT 1
尝试将 id 设置为必需参数,如 this example:
/**
* @Route("
* path = "/delete/article/{id}",
* name = "blog_admin_delete_article"
* requirements = { "id" = "\d+" },
* methods = { "GET" }
* )
*/
public function deleteArticleAction($id) { /* ... */ }
您还可以查看用户加载的代码:
/** @var \Star9988\ModelBundle\Entity\User $user */
$user = $this->getDoctrine()->getRepository('ModelBundle:User')->find($id);
if (!$user instanceof User) {
throw new NotFoundHttpException('User not found for id ' . $id);
}
希望对您有所帮助。
当你得到用户管理器时
$um = $this->container->get('fos_user.user_manager')
您可以在获得用户操作后使用删除,如下所示:
$um->deleteUser($user);
但您需要先检查用户是否不为空。