php twig扩展,Symfony2基础教程之添加Twig的Filter扩展

在Symfony2中添加Twig是个非常简单的事情,在安装sonata-media-bundle的时候 , 发现dev版本没有看到一个叫"number_format_decimal"的扩展 , 结果会出现

The filter "number_format_decimal" does not exist in SonataMediaBundle:MediaAdmin:edit.html.twig at line 54

的报错。stackoverflow没找到原因。所以还不如写个简单的twig extension.

首先在当前项目的Bundle下创建一个Twig目录 然后添加Extension文件 :

// src/Demo/ExtensionBundle/Twig/Extension.php

namespace Demo\ExtensionBundle\Twig;

class Extension extends \Twig_Extension

{

public function getFilters()

{

return array(

//第一个参数是Twig中使用的Filter名 : 比如 {{ foo | number_format_decimal }} 这样foo会作为参数传递过来

//第二个参数是个回调 调用下面编写的Filter方法

new \Twig_SimpleFilter('number_format_decimal', array($this, 'number_format_decimal_Filter')),

);

}

public function number_format_decimal_Filter($number)

{

//这里是你的Filter

return number_format( $number);

}

public function getName()

{

return 'demo_extension';

}

}

然后在Resources/config/service.yml添加service :

services:

demo.twig.extension:

class: Demo\ExtensionBundle\Twig\Extension

tags:

- { name: twig.extension }

刷新那个报错的页面 或者 在twig中用 “number_format_decimal”就ok了。

这里要注意的是依赖的服务的Scope , 比如 Request , 否则可能会出现 CircularReferenceException或者ScopeWideningInjectionException 异常.

关于Scope :

http://symfony.com/doc/current/cookbook/service_container/scopes.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值