Поиск…
параметры
параметры | Описание |
---|---|
$ доктрина | доктрина, которую мы передаем из службы. |
Основной пример Symfony Twig Extension
В этом примере я определяю две пользовательские функции. 1 - функция countryFilter получает код страны в качестве ввода и возвращает полное имя страны. 2 - _countPrinterTasks используется для вычисления количества задач, назначенных конкретному пользователю.
<?php
namespace DashboardBundle\Twig\Extension;
use Symfony\Bridge\Doctrine\RegistryInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\SecurityContext;
/**
* Class DashboardExtension
* @package DashboardBundle\Twig\Extension
*/
class DashboardExtension extends \Twig_Extension
{
protected $doctrine;
private $context;
/**
* DashboardExtension constructor.
* @param RegistryInterface $doctrine
* @param SecurityContext $context
*/
public function __construct(RegistryInterface $doctrine,SecurityContext $context)
{
$this->doctrine = $doctrine;
$this->context = $context;
}
/**
* @return mixed
*/
public function getUser()
{
return $this->context->getToken()->getUser();
}
/**
* @return array
*/
public function getFilters()
{
return array(
new \Twig_SimpleFilter('country', array($this, 'countryFilter')),
new \Twig_SimpleFilter('count_printer_tasks', array($this, '_countPrinterTasks')),
);
}
/**
* @param $countryCode
* @param string $locale
* @return mixed
*/
public function countryFilter($countryCode,$locale = "en")
{
$c = \Symfony\Component\Intl\Intl::getRegionBundle()->getCountryNames($locale);
return array_key_exists($countryCode, $c)
? $c[$countryCode]
: $countryCode;
}
/**
* Returns total count of printer's tasks.
* @return mixed
*/
public function _countPrinterTasks(){
$count = $this->doctrine->getRepository('DashboardBundle:Task')->countPrinterTasks($this->getUser());
return $count;
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'app_extension';
}
}
Чтобы назвать это из Twig, мы просто должны использовать, как показано ниже;
{% set printer_tasks = 0|count_printer_tasks() %}
<tr>
<td>Nationality</td>
<td>
{{ user.getnationality|country|ucwords }}
</td>
</tr>
И объявите это extenstion как услугу в файле bundle/resource/config/service.yml
.
services:
app.twig_extension:
class: DashboardBundle\Twig\Extension\DashboardExtension
arguments: ["@doctrine", @security.context]
tags:
- { name: twig.extension }
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow