15
A
回答
11
,您還可以通過使用getFunctions()
class FacebookExtension extends Twig_Extension
{
public function getFunctions()
{
return array(
'myFunction' => new Twig_Filter_Method($this, 'myFunction'),
);
}
public function myFunction($arg1)
{
return $arg1;
}
使用函數這樣創建樹枝功能:
{{ myFunction('my_param') }}
31
這一切都在這裏:How to write a custom Twig Extension。
1.創建擴展:
// src/Facebook/Bundle/Twig/FacebookExtension.php
namespace Facebook\Bundle\Twig;
use Twig_Extension;
use Twig_Filter_Method;
class FacebookExtension extends Twig_Extension
{
public function getFilters()
{
return array(
'myfilter' => new Twig_Filter_Method($this, 'myFilter'),
);
}
public function myFilter($arg1, $arg2='')
{
return sprintf('something %s %s', $arg1, $arg2);
}
public function getName()
{
return 'facebook_extension';
}
}
2.註冊一個支線的服務
# src/Facebook/Bundle/Resources/config/services.yml
services:
facebook.twig.facebook_extension:
class: Facebook\Bundle\Twig\AcmeExtension
tags:
- { name: twig.extension }
3.使用它
{{ 'blah'|myfilter('somearg') }}
13
以來的Symfony的Twig_Filter_Method類棄用 2.1
請使用Twig_SimpleFilter class改爲如下示例所示:
的\ src \ Acme的\包\ CoreBundle \嫩枝\ DatetimeExtension.php
<?php
namespace Acme\Bundle\CoreBundle\Twig;
use Symfony\Component\DependencyInjection\ContainerInterface;
class DatetimeExtension extends \Twig_Extension
{
/**
* @var \Symfony\Component\DependencyInjection\ContainerInterface
*/
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function getFilters()
{
return array(
'dateFormat' => new \Twig_SimpleFilter('dateFormat', array($this, 'dateFormat')),
'datetimeFormat' => new \Twig_SimpleFilter('datetimeFormat', array($this, 'datetimeFormat'))
);
}
/**
* @param mixed $date
* @return string
*/
public function dateFormat($date)
{
$format = $this->container->getParameter('acme_core.date_format');
return $this->format($date, $format);
}
/**
* @param mixed $date
* @return string
*/
public function datetimeFormat($date)
{
$format = $this->container->getParameter('acme_core.datetime_format');
return $this->format($date, $format);
}
/**
* @param mixed $date
* @param string $format
* @throws \Twig_Error
* @return string
*/
private function format($date, $format)
{
if (is_int($date) || (is_string($date) && preg_match('/^[0-9]+$/iu', $date))) {
return date($format, intval($date, 10));
} else if (is_string($date) && !preg_match('/^[0-9]+$/', $date)) {
return date($format, strtotime($date));
} else if ($date instanceof \DateTime) {
return $date->format($format);
} else {
throw new \Twig_Error('Date or datetime parameter not valid');
}
}
public function getName()
{
return 'datetime_extension';
}
}
的\ src \ Acme的\包\ CoreBundle \資源\ CONFIG \ services.yml
services:
acme_core.twig.datetime_extension:
class: Acme\Bundle\CoreBundle\Twig\DatetimeExtension
arguments: [@service_container]
tags:
- { name: twig.extension }
用例:
{{ value|datetimeFormat }}
Symfony的文檔:http://symfony.com/doc/master/cookbook/templating/twig_extension.html
相關問題
- 1. 創建一個簡單的樹枝過濾器
- 2. 創建樹枝過濾器(控制器外)
- 3. 創建一個樹枝過濾器,以HTML格式包裝輸出
- 4. Symfony的 - 用樹枝反式過濾器上
- 5. 在symfony2中的另一個過濾器樹枝內使用過濾器
- 6. 樹枝中的過濾器調用
- 7. 缺少'format_date'SonataNewsBundle中的樹枝過濾器
- 8. Symfony和PhpStorm樹枝沒有給我樹枝功能的建議
- 9. 如何根據多個表實體創建一個symfony 2搜索過濾器
- 10. 如何創建一個樹從Drupal的分類過濾節點
- 11. 如何使用樹枝創建擴展
- 12. 通過擴展樹枝模板創建一個小調菜單
- 13. 如何調用樹枝過濾器動態
- 14. 我如何使用過濾器將樹枝分割值
- 15. 如何創建過濾器
- 16. 的Symfony如何解析上的樹枝
- 17. 未在樹枝過濾器中指定的樹枝擴展方法參數
- 18. 角度ng-repeat:過濾器在symfony樹枝視圖中不起作用
- 19. Symfony中的樹枝和控制器
- 20. 創建CSS使用樹枝
- 21. symfony - 調用一個控制器在樹枝延伸的行動
- 22. 如何創建自己的Symfony資產過濾器?
- 23. Symfony 2 CMF:在另一個管理樹枝中嵌入內容樹枝
- 24. Symfony2的:在一根樹枝過濾器擴展
- 25. symfony樹枝javascript函數undefined
- 26. symfony樹枝背景圖片
- 27. 的Symfony,樹枝,日期
- 28. symfony的樹枝變量
- 29. 展在樹枝中的Symfony
- 30. symfony的樹枝延伸:
再加上一百萬張選票只是爲了張貼鏈接到正式演練。 – nealio82 2013-05-01 23:07:14