robuust/craft-fixtures

此包已被放弃,不再维护。作者建议使用 craftcms/cms 包。

Craft 3 的 Yii2 固定工具

安装数: 30,637

依赖者: 0

建议者: 0

安全性: 0

星标: 13

关注者: 2

分支: 1

公开问题: 0

类型:craft-plugin

1.1.2 2021-06-21 12:36 UTC

This package is auto-updated.

Last update: 2021-06-21 12:37:44 UTC


README

此插件提供了所有必要的功能来将 Craft Elements 运行为 Yii2 固定工具。如果您不熟悉 Yii2 固定工具,建议您先阅读它们的手册。

安装

您可以使用 Composer 安装此工具。从您的项目根目录运行以下命令

composer require robuust/craft-fixtures

这将把 robuust/craft-fixtures 添加到您的项目的 composer.json 文件中,并将源代码安装到 vendor/robuust/craft-fixtures 目录。

现在,固定工具在 Craft 中可以作为可安装插件使用。您可以在 cp 中安装它,或使用 ./craft install/plugin fixtures

使用

此插件提供了一些抽象的固定工具,您需要扩展并实现。

创建固定工具

在您的项目根目录中创建一个名为 "fixtures" 的文件夹。在这个文件夹中,我们将放置固定类、固定数据和(可选)固定迁移。

Yii2 文档 中,您可以了解固定类和固定数据。

此插件为 Craft 元素提供了固定工具的基础。主要逻辑定义在 robuust\fixtures\base\ElementFixture 中。我们的固定类可以包含以下方法(除了 yii\test\ActiveFixture 提供的所有功能)

ElementFixture::isPrimaryKey(string $key): bool 用于定义哪些模型属性可以用来标识唯一的元素

ElementFixture::getElement(array $data): Element? 用于获取由给定数据标识的元素。使用定义好的主键来标识给定数据。

所有固定工具

ElementFixture 将定义 $this->siteIds,其中包含所有站点处理程序作为键。

资产

扩展 robuust\fixtures\base\AssetFixture 以添加资产。其数据文件可能看起来像这样

<?php

// We need a copy because Asset will move the temp file
copy(__DIR__.'/assets/product.jpg', 'product.jpg');

return [
    [
        'tempFilePath' => 'product.jpg',
        'filename' => 'product.jpg',
        'volumeId' => $this->volumeIds['products'],
        'folderId' => $this->folderIds['clothes'],
    ],
];

这将上传并链接产品.jpg 作为资产。

AssetFixture 将定义 $this->volumeIds$this->folderIds,其中包含它们的处理程序作为键。

其主键为: volumeIdfolderIdfilenametitle

类别

扩展 robuust\fixtures\base\CategoryFixture 以添加类别。其数据文件可能看起来像这样

<?php

return [
    [
        'groupId' => $this->groupIds['categories'],
        'title' => 'Category',
    ],
];

CategoryFixture 将定义 $this->groupIds,其中包含所有类别组处理程序作为键。

其主键为:siteIdgroupIdtitle

条目

扩展 robuust\fixtures\base\EntryFixture 以添加条目。其数据文件可能如下所示

<?php

return [
    [
        'sectionId' => $this->sectionIds['home'],
        'typeId' => $this->typeIds['home']['home'],
        'title' => 'Home',
    ],
];

EntryFixture 将定义 $this->sectionIds,以所有部分句柄作为键。它还将定义 $this->typeIds,以所有部分句柄作为第一个键,条目类型句柄作为第二个键。

其主键为:siteIdsectionIdtypeIdtitle

全局设置

扩展 robuust\fixtures\base\GlobalSetFixture 以更新 (!) 全局设置(它们必须已经存在)。其数据文件可能如下所示

<?php

return [
    [
        'handle' => 'contact'
        'contactAddress' => 'foo',
        'contactCity' => 'bar',
    ],
];

其主键为:siteIdhandle,句柄是已经存在的全局设置之一。

标签

扩展 robuust\fixtures\base\TagFixture 以添加标签。其数据文件可能如下所示

<?php

return [
    [
        'groupId' => $this->groupIds['tags'],
        'title' => 'Tag',
    ],
];

TagFixture 将定义 $this->groupIds,以所有标签组句柄作为键。

其主键为:siteIdgroupIdtitle

用户

扩展 robuust\fixtures\base\UserFixture 以添加用户。其数据文件可能如下所示

<?php

return [
    [
        'username' => 'User',
        'email' => 'info@example.com',
    ],
];

其主键为:siteIdusernameemail

产品

扩展 robuust\fixtures\base\Product 以添加产品。其数据文件可能如下所示

<?php

return [
    [
        'typeId' => $this->productTypeIds['clothes'],
        'title' => 'Product',
    ],
];

ProductFixture 将定义 $this->productTypeIds,以所有产品类型句柄作为键。

其主键为:siteIdtypeIdtitle

运行固件

一旦在 Craft 中安装了插件,您就可以运行一些命令行操作。当您在命令行中运行 ./craft 时,您现在将看到这些操作

- fixtures/fixture                    Manages fixture data loading and unloading.
    fixtures/fixture/load (default)   Loads the specified fixture data.
    fixtures/fixture/unload           Unloads the specified fixtures.

fixtures/fixture 操作是从 Yii2 扩展的,并将接受相同的参数。使用 ./craft fixtures/fixture/load "*" 运行所有固件

运行固件迁移

在命令行中的 fixtures/fixture 操作旁边,您还会找到

- fixtures/migrate                    Migrate controller for fixtures.
    fixtures/migrate/create           Creates a new migration.
    fixtures/migrate/down             Downgrades the application by reverting old migrations.
    fixtures/migrate/fresh            Truncates the whole database and starts the migration from the
                                      beginning.
    fixtures/migrate/history          Displays the migration history.
    fixtures/migrate/mark             Modifies the migration history to the specified version.
    fixtures/migrate/new              Displays the un-applied new migrations.
    fixtures/migrate/redo             Redoes the last few migrations.
    fixtures/migrate/to               Upgrades or downgrades till the specified version.
    fixtures/migrate/up (default)     Upgrades the application by applying new migrations.

fixtures/migrate 操作是从 Craft 扩展的,并将接受相同的参数。使用 ./craft fixtures/migrate/up 运行所有迁移

在测试中使用固件

要在 Craft 3 中使用这些固件进行 Codeception 测试,您可以使用 robuust\fixtures\test\Craft 模块而不是使用 Codeception 的 Yii2 模块

modules:
    enabled:
        - \robuust\fixtures\test\Craft:
            part: [init, fixtures]
            configFile: 'config/app.test.php' # based on vendor/craftcms/cms/tests/_craft/config/test.php
            entryUrl: 'https:///index.php'
            cleanup: true

您可以在测试中加载固件,就像 Yii2 文档所描述的 那样。

示例

这是一个虚构的“联系页面”固件的示例

fixtures/ContactPageEntryFixture.php

<?php

namespace fixtures;

use fixtures\base\EntryFixture;

/**
 * Contact page Fixture for Entry model.
 */
class ContactPageEntryFixture extends EntryFixture
{
    /**
     * {@inheritdoc}
     */
    public $dataFile = __DIR__.'/data/contact-page-entry.php';

    /**
     * {@inheritdoc}
     */
    public $depends = [
        'fixtures\SomeAssetFixture',
    ];
}

fixtures/data/contact-page-entry.php

<?php

use craft\elements\Asset;

$articleThumbIds = Asset::find()->filename('article-thumb.jpg')->ids();

return [
    [
        'sectionId' => $this->sectionIds['contact'],
        'typeId' => $this->typeIds['contact']['contact'],
        'title' => 'Contact',
        'contactMapTitle' => 'Floorplan',
        'contactMapText' => '
            <p>
              Maecenas faucibus mollis interdum. Fusce dapibus, tellus ac cursus commodo, tortor
              mauris condimentum nibh, ut fermentum massa justo sit amet risus. Donec sed odio
              dui. Aenean lacinia bibendum nulla sed consectetur. Curabitur blandit tempus porttitor.
            </p>',
        'contactMapImage' => $articleThumbIds,
        'contactMapPDF' => Asset::find()->filename('test.pdf')->ids(),
    ],
];

许可证

该项目已根据 MIT 许可证 (MIT) 许可。有关更多信息,请参阅 许可证文件

变更日志

CHANGELOG.md