我想拥有一个全局功能,可在所有控制器和枝条扩展中使用。 该功能目前如下所示:
namespace Symfony\Bundle\FrameworkBundle\Controller;
class BaseController extends Controller {
/**
* Check if the user is assigned to one of the given airlines
*
* @param Array $airlines
*
* @return boolean
*/
public function HAS_AIRLINE(Array $airlines) {
if ($airlines == null)
return false;
// Get current user
$user = $this->get('security.context')->getToken()->getUser();
foreach ($airlines as $airline) {
if($user->hasAirline($airline))
return true;
}
return false;
}
我在BaseController.php中实现了这个功能,所以我可以在所有其他控制器中使用它。到目前为止,这完全正常。 现在我想在枝条扩展中使用此功能,但我不知道如何。我的枝条扩展中有以下功能:
/*
* Check if the current user has one of the given roles by using the function provided by the base controller
*/
public function hasAirline($airlines= Array())
{
if($airlines == null)
return false;
// How can I now use the function from my BaseController?
return HAS_AIRLINE($airlines);
}
我已经尝试将BaseController定义为服务并在twig扩展中使用该服务,但我无法管理它。
有人可以帮帮我吗?我觉得还有一些我对Symfony还不了解的东西,但是文档并没有真正帮助我。谢谢你, MRE
答案 0 :(得分:1)
您可以移动User
实体中的逻辑:
class User
{
public function hasAirline($airlines)
{
foreach ($airlines as $airline)
{
if ($this->getAirlines()->contains($airline))
{
return true;
}
}
return false;
}
}
如果getAirlines()
从Doctrine2返回ArrayCollection
,这将有效,这允许使用contains()
方法。
然后你可以在控制器中使用它:
public function HAS_AIRLINE(Array $airlines) {
return $this->get('security.context')->getToken()->getUser()
->hasAirline($airlines);
}
或在Twig中使用app.user
:
{{ set hasAirline = app.user.hasAirline(airlines) }}