Symfony 从另一个控制器服务访问控制器服务引发异常
我在bundle services.xml文件中设置了3个简单控制器,如下所示:Symfony 从另一个控制器服务访问控制器服务引发异常,symfony,dependency-injection,Symfony,Dependency Injection,我在bundle services.xml文件中设置了3个简单控制器,如下所示: http://symfony.com/schema/dic/services/services-1.0.xsd“> } 我得到一个奇怪的错误: FatalErrorException:错误:在/Users/bard/Projects/LavelAPI/src/Wsh/LapiBundle/Controller/UserController.php第82行中找不到类'Symfony\Component\Debug
http://symfony.com/schema/dic/services/services-1.0.xsd“>
}
我得到一个奇怪的错误:
FatalErrorException:错误:在/Users/bard/Projects/LavelAPI/src/Wsh/LapiBundle/Controller/UserController.php第82行中找不到类'Symfony\Component\Debug\Exception\ContextErrorException'
我不知道该怎么办,第82行是UserController的结尾,看起来如下:
类UserController扩展控制器
{
受保护的集装箱
function __construct(Container $container)
{
$this->container = $container;
}
public function postAlert($appIdToken, $securityToken, $searchParams)
{
// first let see if user not allready registered
$em = $this->getDoctrine()->getManager();
//$user = $this->container->get('wsh_lapi.users')->getUser($appIdToken, $securityToken);
if($this->container->has('wsh_lapi.users')) {
// this throws FatalErrorExecption
$userService = $this->container->get('wsh_lapi.users');
}
// check if that alert does not exist allready
$alertRepo = $em->getRepository('WshLapiBundle:Alert');
// todo: do checking
// create new alert object
$alert = new Alert();
$alert->setUser($user);
$alert->setSearchQueryParams($searchParams);
$em->persist($alert);
$em->flush();
return $alert;
}
function __construct(Container $container)
{
$this->container = $container;
}
/**
* Register new user or return existing one based on given AppId token
* @param $appIdToken unique user token generated in client app
* @return User
*/
public function registerDevice($appIdToken)
{
// first let see if user not allready registered
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('WshLapiBundle:User');
$user = $repo->findOneByAppId($appIdToken);
if(!$user) {
// user not found create new one
$user = new User();
$user->setAppId($appIdToken);
$em->persist($user);
$em->flush();
}
return $user;
}
/**
* Removes user from database so he's token will no longer be authenticated
*
* @param $appIdToken
* @param $securityToken
* @return string
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function unRegisterDevice($appIdToken, $securityToken)
{
$user = $this->getUser($appIdToken, $securityToken);
$em = $this->getDoctrine()->getManager();
$em->remove($user);
$em->flush();
return "OK";
}
public function getUser($appIdToken, $securityToken)
{
// first let see if user not allready registered
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('WshLapiBundle:User');
$user = $repo->findOneByAppId($appIdToken);
if(!$user) {
throw $this->createNotFoundException('No user with appIdToken: '.$appIdToken.' has been found');
}
// check security token
if(!$user->checkSecurityToken($securityToken)) {
throw new \Exception('Request not authorized. Tokens does not match');
}
return $user;
}
}
原来问题出在我的wsh_lapi.users服务控制器中的函数“getUser”的名称上。可能是与Symfony base controller发生了某种冲突。在我简单地更改函数名称后,它就开始工作了
function __construct(Container $container)
{
$this->container = $container;
}
/**
* Register new user or return existing one based on given AppId token
* @param $appIdToken unique user token generated in client app
* @return User
*/
public function registerDevice($appIdToken)
{
// first let see if user not allready registered
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('WshLapiBundle:User');
$user = $repo->findOneByAppId($appIdToken);
if(!$user) {
// user not found create new one
$user = new User();
$user->setAppId($appIdToken);
$em->persist($user);
$em->flush();
}
return $user;
}
/**
* Removes user from database so he's token will no longer be authenticated
*
* @param $appIdToken
* @param $securityToken
* @return string
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function unRegisterDevice($appIdToken, $securityToken)
{
$user = $this->getUser($appIdToken, $securityToken);
$em = $this->getDoctrine()->getManager();
$em->remove($user);
$em->flush();
return "OK";
}
public function getUser($appIdToken, $securityToken)
{
// first let see if user not allready registered
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('WshLapiBundle:User');
$user = $repo->findOneByAppId($appIdToken);
if(!$user) {
throw $this->createNotFoundException('No user with appIdToken: '.$appIdToken.' has been found');
}
// check security token
if(!$user->checkSecurityToken($securityToken)) {
throw new \Exception('Request not authorized. Tokens does not match');
}
return $user;
}