如何使用 Symfony 访问树枝扩展中的全局服务功能?
How to access a global service function within a twig extension using Symfony?
我想要一个全局函数,它在所有控制器和 twig 扩展中都可用。
该函数目前看起来像这样:
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
您可以移动 User
实体中的逻辑:
class User
{
public function hasAirline($airlines)
{
foreach ($airlines as $airline)
{
if ($this->getAirlines()->contains($airline))
{
return true;
}
}
return false;
}
}
如果 getAirlines()
return 来自 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) }}
我想要一个全局函数,它在所有控制器和 twig 扩展中都可用。 该函数目前看起来像这样:
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
您可以移动 User
实体中的逻辑:
class User
{
public function hasAirline($airlines)
{
foreach ($airlines as $airline)
{
if ($this->getAirlines()->contains($airline))
{
return true;
}
}
return false;
}
}
如果 getAirlines()
return 来自 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) }}