Séb*_*ien 5 javascript escaping filter symfony twig
我创建了一个简单的函数,用js渲染模板.我想它自动调用所以我已经将is_safe参数设置为array(html')而不必使用| raw filter
但它不起作用,jsis没有转义,而是呈现为纯文本.如果我使用原始过滤器,它可以正常工作.
我怎么解决这个问题?
我的简单功能:
<?php
namespace AppBundle\Extension\Twig;
use AppBundle\FoodMeUpParameters;
use AppBundle\Model\Interfaces\ViewCountInterface;
use ReflectionClass;
use Symfony\Component\DependencyInjection\ContainerInterface;
class FMUTwigExtension extends \Twig_Extension
{
/**
* @var ContainerInterface
*/
private $container;
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
}
public function getFunctions()
{
return array(
'increaseViewCount' => new \Twig_SimpleFunction('increaseViewCount', array($this, 'increaseViewCount', array('is_safe' => array('html')))),
);
}
public function increaseViewCount(ViewCountInterface $entity, $andFlush = true)
{
$reflect = new ReflectionClass($entity);
$parameters = array(
'short_name' => $reflect->getShortName(),
'identifier' => $entity->getId(),
'and_flush' => $andFlush
);
return $this->container->get('templating')->render(':Helper:increase_view_count.htmpl.twig', $parameters);
}
}
Run Code Online (Sandbox Code Playgroud)
我的模板:
<script>
$(function(){
$.ajax({
url: '{{ path('increase_view_count') }}',
type: "post",
dataType: "json",
data: {shortName: '{{ short_name }}', identifier: '{{ identifier }}', andFlush: '{{ and_flush }}'},
success: function (result) {
console.log(result);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
服务声明
fmu_twig_extension:
class: %fmu_twig_extension.class%
calls:
- [setContainer, [@service_container]]
tags:
- { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)
您已将'is_safe'选项包含在回调中,而不是在next($options)参数中.
你需要改变....
'increaseViewCount' => new \Twig_SimpleFunction('increaseViewCount', array($this, 'increaseViewCount', array('is_safe' => array('html')))),
Run Code Online (Sandbox Code Playgroud)
... 至 ...
'increaseViewCount' => new \Twig_SimpleFunction('increaseViewCount', array($this, 'increaseViewCount'), array('is_safe' => array('html'))),
Run Code Online (Sandbox Code Playgroud)
jku*_*vic -1
我想,根据你的情况,你应该选择'is_safe' => ['js']. 如果由于某种原因它没有帮助,您可以使用 Twig 的过滤器中的定义raw,其中定义is_safe为all。
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |