Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php FOSuserBundle symfony 2用户界面错误中的DeleteUser方法_Php_Symfony_Fosuserbundle - Fatal编程技术网

Php FOSuserBundle symfony 2用户界面错误中的DeleteUser方法

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

我在使用$UserManager->deleteUser($user)删除用户时遇到问题。我得到一个错误:错误:类AppBundle\Controller\UsermanagerController包含35个抽象方法,因此必须声明为抽象或实现其余方法

我的控制器:

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;
}