creode/laravel-taxonomy

Laravel中处理分类的基础模块。

1.3.0 2023-11-01 09:35 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此模块旨在允许其他模块为其模型添加分类。它提供术语的基础类和可继承的模型特性。

安装

您可以通过composer安装此包。

composer require creode/laravel-taxonomy

使用方法

本节介绍了该模块的一些特性和使用方法。

术语类

术语类对应于分类中的一个单个术语。它是一个可以用来存储关于术语的额外信息的模型。

本模块旨在允许您通过扩展基础术语类轻松创建新的术语模型。这允许您为术语添加附加功能。以下是一个如何实现的示例。

use Creode\LaravelTaxonomy\Models\Term;

class Folder extends Term {
    /**
     * Machine name of the specific term to use.
     *
     * @var string
     */
    protected $machine_name = 'folders';
}

动态关系

本模块的目标是允许其他模块向子类添加动态关系。例如,您可能想将上面的Folder模型链接到Page模型。这可以通过扩展TermsServiceProvider并添加以下属性来实现。

class FolderPageServiceProvider extends TermsServiceProvider {
    protected $termClass = Folder::class;
    protected $relationClass = Page::class;
    protected $relationFieldId = 'folder_id'; // optional (only used if multiple is false).
    protected $relationshipName = 'folder';
    protected $multiple = false; // optional (defaults to false).
}

以这种方式添加关系允许模块之间的依赖解耦。这意味着Page模块不需要了解Folder模块即可在两者之间添加关系。

可继承特性

可继承特性允许您向术语添加父级关系。这对于创建术语的层次结构很有用。例如,您可能想为术语创建一个文件夹结构。

use Creode\LaravelTaxonomy\Concerns\Parentable;

class Folder extends Term {
    use Parentable;
}

迁移助手

由于此模块旨在由其他模块使用,因此它附带一个可选的助手类,可用于创建常见的Term字段。此助手类可以用于迁移文件中,如下所示

Schema::create('folders', function (Blueprint $table) {
    $table->id();
    $table->baseTermFields();
});

这将为您的表添加以下字段。如果您愿意,也可以手动添加这些字段

$this->string('name')->nullable();
$this->string('slug')->nullable();
$this->unsignedBigInteger('parent_id')->nullable();

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

鸣谢

许可协议

MIT许可协议(MIT)。有关更多信息,请参阅许可文件