Php FOSuserBundle symfony 2用户界面错误中的DeleteUser方法
我在使用$UserManager->deleteUser($user)删除用户时遇到问题。我得到一个错误:错误:类AppBundle\Controller\UsermanagerController包含35个抽象方法,因此必须声明为抽象或实现其余方法 我的控制器:Php FOSuserBundle symfony 2用户界面错误中的DeleteUser方法,php,symfony,fosuserbundle,Php,Symfony,Fosuserbundle,我在使用$UserManager->deleteUser($user)删除用户时遇到问题。我得到一个错误:错误:类AppBundle\Controller\UsermanagerController包含35个抽象方法,因此必须声明为抽象或实现其余方法 我的控制器: namespace AppBundle\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Con
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use AppBundle\Entity\UserManager;
use FOS\UserBundle\Model\UserInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class UsermanagerController extends Controller implements UserInterface
{
public function deleteAction($user){
$UserManager = $this->container->get('fos_user.user_manager');
if ($user == null) {
throw new NotFoundHttpException('User not found for user ' . $user);
}
$UserManager->deleteUser($user);
return $this->redirect($this->generateUrl('admin_index'));
}
我的实体:
namespace AppBundle/Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Doctrine\UserManager as BaseCustomer;
use FOS\UserBundle\Model\UserInterface;
/**
*@ORM|Entitiy
*
*/
class UserManager extends BaseCustomer implements UserInterface
{
}
My config.yml:
orm:
和Routing.yml:
fos_deleteuser_group:
path: /app/usermanager/delete/{user}
defaults: { _controller: AppBundle:Usermanager:delete }
我试图使用FOS/UserBundle/doctrine/UserManager,但运气不好
提前感谢您的帮助。总结如下:
您的第一个错误是在控制器中实现了UserInterface
。你把它拿走了
然后,由于将字符串传递给UserManager::deleteUser
方法,该方法需要一些UserInterface
我将为您提供一些代码,这些代码应该可以解决这个问题
<?php
/**
* @param $username string
* @return Response
*/
public function deleteAction($username) {
$userManager = $this->get('fos_user.user_manager');
/* @var $userManager UserManager */
$user = $userManager->findUserByUsername($username);
if(\is_null($user)) {
// user not found, generate $notFoundResponse
return $notFoundResponse;
}
\assert(!\is_null($user));
$userManager->deleteUser($user);
// okay, generate $okayResponse
return $okayResponse;
}
如果我删除它,我会得到一个错误:可捕获的致命错误:传递给FOS\UserBundle\Doctrine\UserManager::deleteUser()的参数1必须实现接口FOS\UserBundle\Model\UserInterface,给定字符串,在第34行的AppBundle\Controller\UsermanagerController.php中调用并定义。因为我在FOSuserbundle中调用的初始方法是Deleteuser(UserInterface$user),抱歉,这是另一点。仅仅是产生另一个错误,你无法修复它。你为什么不读一下这封信,然后试着把它修好呢?当然,你不能传递一个字符串。使用其中一种findUser*
方法获取用户(例如findUserByUsername
)。很抱歉,我尝试了关于此主题的所有方法,甚至复制了所有用户界面函数,。。。但我是Symfony 2的初学者,仍在学习框架的工作原理……您的解决方案非常有魅力。非常感谢。你能解释一下这个\assert(!\is_null($user))是什么吗;做ThanksI总是尝试编写在顶部输入,在底部返回的代码。如果可能会出现一些错误以便尽早返回,我不想将所有代码缩进一个或多个更大的If块中,因为这样做是不可读的。所以我检查错误并立即返回。如果
没有其他变量,那么我可以写下断言,以明确我期望的变量是什么。在这种情况下,删除断言
就足够清楚了。有许多表达式,如fail fast或early error detection,支持assert
。
<?php
/**
* @param $username string
* @return Response
*/
public function deleteAction($username) {
$userManager = $this->get('fos_user.user_manager');
/* @var $userManager UserManager */
$user = $userManager->findUserByUsername($username);
if(\is_null($user)) {
// user not found, generate $notFoundResponse
return $notFoundResponse;
}
\assert(!\is_null($user));
$userManager->deleteUser($user);
// okay, generate $okayResponse
return $okayResponse;
}