我正在使用 Symfony 2.3,但找不到在两个表上添加安全性的好解决方案。
我有一个用户,这个用户可以得到一个应用程序,他可以通过这个路径访问他的应用程序:/application/{id}
因此,如果用户链接到应用程序,我想保护此页面。我做了一些事情来检查我的控制器,但这不是很干净:
/**
*
* @param int $idApplication
* @return UserApplication
*/
public function testUserApplication($idApplication){
//get the application
$applicationRepository = $this->getDoctrine()->getRepository('PhoneApplicationBundle:Application');
$application = $applicationRepository->find($idApplication);
if($application==null){
return null;
}
$userApplicationRepository = $this->getDoctrine()->getRepository('PhoneApplicationBundle:UserApplication');
$userApplication = $userApplicationRepository->findOneBy(array(
'user' => $this->getUser(),
'application' => $application
));
return $userApplication;
}
我不知道我是否可以使用安全性来做到这一点。
我尝试另一种解决方案来创建一个检查这个的服务
class Test
{
/** @var \Doctrine\ORM\EntityManager */
private $doctrine;
/**
* Constructor
*
* @param Doctrine $doctrine
*/
public function __construct(Doctrine $doctrine)
{
$this->doctrine = $doctrine;
}
public function userApplication($idApplication){
//get the application
$applicationRepository = $this->doctrine->getRepository('PhoneApplicationBundle:Application');
$application = $applicationRepository->find($idApplication);
if($application==null){
return null;
}
$userApplicationRepository = $this->doctrine->getRepository('PhoneApplicationBundle:UserApplication');
$userApplication = $userApplicationRepository->findOneBy(array(
'user' => $this->getUser(),
'application' => $application
));
return $userApplication;
}
}
服务.yml:
parameters:
phone_application.test_user_application.class: Phone\ApplicationBundle\Service\Test
services:
phone_application.test_user_application:
class: %phone_application.test_user_application.class%
arguments: [@doctrine]
但我真的不明白如何在控制器中使用它
感谢帮助。