alanablett/twig-faker

PHP faker 库与 twig 模板系统的集成。

1.1.2 2016-05-18 14:59 UTC

This package is auto-updated.

Last update: 2024-09-27 04:10:02 UTC


README

Build Status Code Coverage Scrutinizer Code Quality

Latest Stable Version Total Downloads Latest Unstable Version License

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 %}