本文概述
- 建立类
- 写扩展名
- 注册服务
- 在模板上测试
【如何在Symfony 2和3中的模板上使用Twig执行原则查询】但是, 如果你很着急, 这将为你解决问题:
- 创建一个包含树枝扩展名的类。
- 写扩展名。
- 在你的应用程序中注册扩展名。
- 在模板上测试你的方法。
建立类在项目的某个位置创建一个名为TwigExtensions.php的文件(你需要知道名称空间, 稍后我们将需要它)。在此示例中, 我们将在项目的/ src文件夹中创建一个名为Extensions的文件夹。因此, 在这种情况下, 名称空间将是ourcodeworld \ Extensions。了解要创建的要在services.yml文件中注册的类的名称空间很重要。
写扩展名我们的TwigExtensions.php文件内容应该看起来像(并且类名也需要匹配[TwigExtensions]):
<
?php
// Note that the namespace must match with
// your project !
namespace ourcodeworld\Extensions;
use Symfony\Bridge\Doctrine\RegistryInterface;
class TwigExtensions extends \Twig_Extension
{
public function getFunctions()
{
// Register the function in twig :
// In your template you can use it as : {{find(123)}}
return array(
new \Twig_SimpleFunction('find', array($this, 'find')), );
}protected $doctrine;
// Retrieve doctrine from the constructor
public function __construct(RegistryInterface $doctrine)
{
$this->
doctrine = $doctrine;
}public function find($id){
$em = $this->
doctrine->
getManager();
$myRepo = $em->
getRepository('ourcodeworldarticlesBundle:Articles');
///return $myRepo->
find($id);
}public function getName()
{
return 'Twig myCustomName Extensions';
}
}
在上一课中, 我们注册了一个名为find的方法, 该方法可以使用twig进行访问:
{# Find a register with id 2 #}{{dump(find(2))}}
请注意, 你需要更改存储库的名称(更改find??函数的工作方式), 然后就可以开始使用了。该函数的名称需要在twig中注册为一个函数, 因此你需要在该类的getFunctions方法的返回数组中注册它。该类的构造函数期望将学说作为参数(这将允许你在此类中执行查询), 它将在下一步中发送, 因此如果你不了解, 请不要担心。
注册服务现在, 该类已存在, 你需要在项目的/ app / config路径中的services.yml文件中注册。如前所示, 该类期望将Doctrine作为第一个参数, 现在我们将使用yml来发送它。使用以下方法注册你的服务:
services:
twig.extension:
# Register the class (The namespace must match)
class: ourcodeworld\Extensions\TwigExtensions
# Inject doctrine as first parameter
arguments:
doctrine : '@doctrine'
tags:
-{ name: twig.extension }
最后, 不要忘记清除项目的缓存。
在模板上测试现在, 你将可以在模板上使用find方法。请注意, 这些方法是全局的, 可以从所有模板中访问。
<
h1>
Hello, the title of this article is {{find(123).title}}<
/h1>
玩得开心
推荐阅读
- 如何在Twig中重复现有的块
- 如何在Symfony 3中使用FFMpeg将webm视频转换为mp4
- C#中的String和string关键字有什么区别
- 如何在Twig中将日期时间对象格式化为ISO 8601
- 如何使用Symfony 3中的免费GeoLite数据库从访问者的IP中检测城市,国家和地区
- 如何检查用户是否已经选中了Google Recaptcha复选框
- 感悟|Java后端学习体系(韩顺平)
- Aria2怎样下载百度云?Aria2下载百度云运用图文详细教程
- 360压缩如何加密?360压缩加密办法列表