метод обслуживания как глобальная переменная ветки

В моем приложении symfony2 у меня есть метод getPorfolioUser, который возвращает определенную пользовательскую переменную.

Я с нетерпением жду возможности позвонить

{% if portfolio_user%}

в ветке Я не понимал, как я могу установить это как глобальную переменную, так как из документации у меня сложилось впечатление, что я могу устанавливать только фиксированные элементы или сервисы, но не методы сервисов.

Я обязан написать расширение или помощник для этого?
Какой простой способ сделать это?

Спасибо!

10

Решение

Вы можете определить свой пользовательский сервис как 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() %}

Надеюсь это поможет

13

Другие решения

Одним из подходов является использование прослушивателя событий 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

В любом случае хорошо работает.

4

Когда вы смотрите здесь:
http://symfony.com/doc/current/reference/twig_reference.html#app

Вы можете прочитать это:

Переменная app доступна везде и дает доступ ко многим
обычно необходимые объекты и ценности. Это пример
GlobalVariables.

GlobalVariables является Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables

Я никогда не делаю этого, но я думаю, что один из способов — это пройти этот класс, чтобы удовлетворить ваши особые потребности.

1

У меня были некоторые трудности с этим, и я наконец решил это, выполнив следующее:

 

  1. Настройте свой пакет (например, MyVendor / MyBundle)

    $ app/console generate:bundle
    

 

  1. В каталоге вашего комплекта создайте MyService.php файл класса в Внедрение зависимости папка.

 

  1. В этом файле класса создайте функцию

    public function getExample(){
    return "it works!!!";
    }
    

 

  1. В приложение / Config / services.yml создать новый сервис, например, так:

    myvendor.mybundle.myservice
    class: MyVendor\MyBundle\DependencyInjection\MyService
    

 

  1. В приложение / Config / config.yml под прут раздел конфигурации

    twig:
    globals:
    mystuff: '@myvendor.mybundle.myservice'
    

 

  1. Затем в ваших шаблонах веток вы можете ссылаться на переменную следующим образом:

     {{ mystuff.example }}
    

 

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

это просто, как я получил его на работу ….

надеюсь это поможет.

0
По вопросам рекламы [email protected]