Php Assetic细枝图像函数的简短语法
我在assetic上添加了如下图片:Php Assetic细枝图像函数的简短语法,php,image,symfony,twig,assetic,Php,Image,Symfony,Twig,Assetic,我在assetic上添加了如下图片: {% image '@MyBundle/Resources/public/img/name.png' %} <img src="{{ asset_url }}"/> {% endimage %} 但如果我现在使用它: <img src="{{ timg('@MyBundle/Resources/public/img/name.png') }}" /> 我得到一个例外: 编译模板期间引发异常(“可捕获致命错误:传递给Twi
{% image '@MyBundle/Resources/public/img/name.png' %}
<img src="{{ asset_url }}"/>
{% endimage %}
但如果我现在使用它:
<img src="{{ timg('@MyBundle/Resources/public/img/name.png') }}" />
我得到一个例外:
编译模板期间引发异常(“可捕获致命错误:传递给Twig_节点_表达式_GetAttr::_构造()的参数3”)必须是第66行的Twig\u Node\u Expression\u数组的实例,给定Twig\u节点的实例,在C:\wamp2\www\symfony\vendor\symfony\assetic bundle\symfony\bundle\AsseticBundle\Twig\AsseticNodeVisitor.php中调用,并在C:\wamp2\www\symfony\vendor\Twig\lib\Twig\Node\Expression\GetAttr.php第14行“:top.html.Twig”中定义
有什么想法吗?也许我不能在没有筛选器的情况下仅使用函数作为简短语法?我建议您定义一个非常简单的筛选器,并像
{{'mypath'| timg}}
那样使用它:
class ImgExtension extends \Twig_Extension
{
private $asset;
public function __construct(Container $c){
$this->asset = $c->get('templating.helper.assets');
}
public function getFilters(){
return array('timg' => new \Twig_Filter_Method($this, 'timg'));
}
public function timg($src, $package = null) {
$url = $this->asset->getUrl($src, $package);
return '<img src="'.$url.'" />';
}
public function getName(){
return 'timg';
}
}
类ImgExtension扩展\Twig\u扩展
{
私人美元资产;
公共函数构造(容器$c){
$this->asset=$c->get('templating.helper.assets');
}
公共函数getFilters(){
返回数组('timg'=>new\Twig_Filter_方法($this,'timg'));
}
公共函数timg($src,$package=null){
$url=$this->asset->getUrl($src,$package);
返回“”;
}
公共函数getName(){
返回“timg”;
}
}
然后您可以添加一些其他有用的参数,例如
alt
,title
,等等。您的函数名需要映射到过滤器名
例如:
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [MyBundle]
filters:
cssrewrite: ~
twig:
functions:
cssrewrite: ~
允许您执行以下操作:
<link rel="stylesheet" href="{{ cssrewrite('bundles/my/css/style.css') }}" />
这简单地说明了语法:使用cssrewite作为函数可以在dev上工作,但不能在prod上工作-没有揭示我重申twig中assetic filter函数最适合的建议的确切原因
为了以相同的方式将timg
用作函数,必须首先将其定义为Asset过滤器。您必须首先将其实现为
“一目了然”@alexcasalboni的回答提供了一个实施细枝过滤器的好例子,而且似乎比在symfony中设置Asset过滤器的配置要少。这里我想到了这个简短的sintax
<link rel="stylesheet" href="{{ cssrewrite('bundles/my/css/style.css') }}" />