在我的symfony2应用程序中,我有一个getPorfolioUser方法,它返回一个特定的用户变量。
我期待能够致电
在树枝上。我不明白如何将其设置为全局变量,因为我在印象中只能设置固定元素或服务而不是服务'方法{%if portfolio_user%}
我是否有义务为此编写扩展或帮助? 这样做的简单方法是什么?
谢谢!
答案 0 :(得分:14)
您可以将自定义服务定义为twig globals variable
,如下所示:
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
myGlobaService: "@acme.demo_portfolio_service" #The id of your service
{% if myGlobaService.portfolio_user() %}
希望这个帮助
答案 1 :(得分:5)
一种方法是使用CONTROLLER事件监听器。我喜欢使用CONTROLLER而不是REQUEST,因为它确保所有常规请求监听器已经完成了它们的工作。
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ProjectEventListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array
(
KernelEvents::CONTROLLER => array(
array('onControllerProject'),
),
);
}
private $twig;
public function __construct($twig)
{
$this->twig = $twig;
}
public function onControllerProject(FilterControllerEvent $event)
{
// Generate your data
$project = ...;
// Twig global
$this->twig->addGlobal('project',$project);
}
# services.yml
cerad_project__project_event_listener:
class: ...\ProjectEventListener
tags:
- { name: kernel.event_subscriber }
arguments:
- '@twig'
听众在此处记录:http://symfony.com/doc/current/cookbook/service_container/event_listener.html
另一种方法是完全避免树枝全球化,只是进行树枝延伸调用。 http://symfony.com/doc/current/cookbook/templating/twig_extension.html
无论哪种方式都运作良好。
答案 2 :(得分:1)
当你看到这里: http://symfony.com/doc/current/reference/twig_reference.html#app
您可以阅读:
app变量随处可用,可以访问许多变量 通常需要的对象和价值观。这是一个例子 GlobalVariables。
GlobalVariables
是Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables
我从来没有这样做,但我认为有一种方法可以覆盖这个课程,以满足您的特殊需求。
答案 3 :(得分:0)
我也遇到了一些困难,最后通过以下方式解决了这个问题:
设置您的捆绑包(例如:MyVendor / MyBundle)
$ app/console generate:bundle
在此类文件中,创建函数
public function getExample(){
return "it works!!!";
}
在 app / config / services.yml 中创建一个新服务:
myvendor.mybundle.myservice
class: MyVendor\MyBundle\DependencyInjection\MyService
twig 配置栏目 app / config / config.yml
twig:
globals:
mystuff: '@myvendor.mybundle.myservice'
然后在您的树枝模板中,您可以像这样引用变量:
{{ mystuff.example }}
<强>声明强>
这就是我开始工作的方式......
希望这会有所帮助。