alanablett / twig-faker
PHP faker 库与 twig 模板系统的集成。
Requires
- fzaninotto/faker: ~1.5
- twig/twig: ~1.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-27 04:10:02 UTC
README
TwigFaker
一个扩展,可以将 faker 库添加到 twig 模板中,提供在模板内快速高效生成虚拟数据的方法。以下是一个快速示例
配置你的虚拟数据类型 factories/person.php
<?php return [ 'first_name' => $faker->firstName, 'last_name' => $faker->lastName, 'avatar' => $faker->imageUrl(300, 300) ];
在模板中使用
{% for person in fake('person', 20) %} <p>Hello {{ person.first_name }} {{ person.first_name }}</p> <img src="{{ person.avatar }}"> {% endfor %}
使用方法
步骤 1: 安装
通过 Composer 拉取此包。
"require": { "alanablett/twig-faker": "~1.1" }
步骤 2: 将 TwigFaker 扩展注册到 twig
$twig->addExtension(new Ablett\TwigFaker\TwigFakerExtension);
步骤 3: 创建一个工厂文件
TwigFaker 并非魔法。你需要描述应该生成的数据类型。
你创建的每个工厂文件都将自动拥有访问 $faker
变量的权限。这只是一个你通过执行 Faker\Factory::create
创建的正常工厂。
在你的项目根目录下的 factories
目录中,你可以创建任意数量的 PHP 文件,这些文件将自动由 TwigFaker 加载。为什么不从通用的 factories/person.php
文件开始呢。
<?php return [ 'first_name' => $faker->firstName, 'last_name' => $faker->lastName, 'avatar' => $faker->imageUrl(300, 300) ];
步骤 4: 在 twig 模板中调用你的新工厂
定义了新工厂后,你可以在 twig 模板中使用它。
{% for person in fake('person', 20) %} <p>Hello {{ person.first_name }} {{ person.first_name }}</p> <img src="{{ person.avatar }}"> {% endfor %}
fake
方法传递的第一个参数是要使用的工厂名称。第二个参数是你想要循环的虚拟实例数量(如果没有传递参数,默认为 1)。
注意:你可以将工厂组织在文件夹中,例如 factories/subfolder/another/example.php
{% for example in fake('subfolder/another/example', 20) %} <p>{{ example.value }}</p> {% endfor %}
与 Sculpin 一起使用
步骤 1: 安装
通过将此包添加到 sculpin.json
文件来通过 Composer 拉取此包。
"require": { "alanablett/twig-faker": "~1.1" }
步骤 2: 将 TwigFaker 扩展注册到 sculpin
为了在 sculpin 中使用扩展,我们必须将其添加到 sculpin 知道的扩展中。这是通过将其添加到 app/config/sculpin_kernel.yml
来完成的。
services: twig.extension.faker: class: Ablett\TwigFaker\TwigFakerExtension tags: - { name: twig.extension }
遵循上述步骤创建新工厂并在模板中使用它们。
其他功能
缓存
从版本 1.1 开始,你现在可以缓存你的虚拟数据以便稍后在下页使用。这特别有用,当你的标记必须存在于不同的区域,但必须使用相同的数据时。例如,我定义了一个英雄块工厂如下所示
<?php return [ 'title' => $faker->sentence(), 'background' => $faker->imageUrl(1700, 600) ];
现在在我的标记中,我想使用相同的数据对两个不同的 fake
方法调用,因此我简单地传递一个键作为第三个参数以确保数据相同,在这种情况下是 main-heroes
{% for hero in fake('heroes', 4, 'main-heroes') %} <div class="hero__cell" data-background-url="{{ hero.background }}"> <h2>{{ hero.title }}</h2> </div> {% endfor %} ... ... ... {% for hero in fake('heroes', 4, 'main-heroes') %} <div class="hero__button"> <button>{{ hero.title }}</button> </div> {% endfor %}