dive-be/nova-linkable-field

可选地链接到不同的模型,作为手动属性值的替代。

v0.2.1 2023-01-31 09:52 UTC

This package is auto-updated.

Last update: 2024-08-29 05:56:17 UTC


README

此软件包允许您提供一个字段,该字段可以选择性地链接到不同的模型,作为手动属性值的替代。

此软件包解决了什么问题?

有时,您希望后端用户能够从不同的模型中推导出值,或者手动填写值。

如果您有一个模型可能链接到另一个模型以获取属性,但又想提供一个回退值(以防未链接),则在后端可能会很快变得混乱。在这种情况下,您将在资源中结束两个字段,并且用户需要理解回退值仅在资源未链接到其他模型时才使用。这并不明显。

使用此软件包,您可以提供一个单字段,用户可以明确选择,没有混淆的空间:从特定模型获取属性的值,或手动填写。(查看以下用例。)

用例

例如:您在应用程序中有一个 MenuItem 模型。

也许您希望这个 MenuItem 链接到特定的模型(例如 Page 模型),该模型有自己的 URL。您可以这样做,或者提供手动 URL 选项(如果您不想链接模型)。

这使得 Nova 中的用户非常清楚地知道,相关的字段是 要么 链接的,要么是固定的、手动的值。

要求

  • laravel/framework: ^9.0
  • laravel/nova: ^3.0

安装

您可以通过 Composer 安装此软件包

composer require dive-be/nova-linkable-field

您可以使用以下命令发布迁移和配置文件

php artisan vendor:publish --provider="Dive\Nova\Linkable\FieldServiceProvider"

用法

术语

  • 一个模型可以 链接 到一个或多个模型。
  • 附加的模型称为 目标,而发起者是 链接 模型。
  • 如果没有指定 目标,则使用回退值(“手动值”)。

设置资源

您必须发布并运行包含的迁移

php artisan vendor:publish --provider="Dive\Nova\Linkable\FieldServiceProvider"
php artisan migrate

在资源中,您可以选择要使用链接字段的字段。

use Dive\Nova\Linkable\Linkable;

Linkable::make('URL', 'url')
    ->withLinkable(
        Page::class, // the related model that is linked
        'CMS Page', // how the model is identified to the user
        ['title'], // columns queried for use in the callback (next parameter)
        fn ($page) => $page->getAttribute('title') // callback that resolves the display value of the related model
    ),

如果您想有多个链接选项,可以多次调用 withLinkable 方法。

设置模型

首先,让我们从 链接 类开始,这是发起者。它需要 InteractsWithLinks 特性。

use InteractsWithLinks;

因此,如果您有一个同质集合,只包含相同类型的模型,您可以加载此信息。下面是如何做到这一点

use \Dive\Nova\Linkable\LinkedCollection;

// Load the target relationships and attributes in as few queries as possible
$menuItems = LinkedCollection::create(MenuItem::all())
    ->loadLinkedData(['url']);

// Access the target (returns a model)
$menuItems->first()->linkedTargets['url'];

// Access the attribute (returns a value by calling `getLinkableValue()` on the linked target model)
$menuItems->first()->linkedAttributes['url'];

如果您尝试在非同质集合或不支持链接值的模型上加载链接关系,您将得到一个异常,解释了出了什么问题。

更新日志

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

贡献

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

安全性

如果您发现任何与安全相关的问题,请通过电子邮件 oss@dive.be 而不是使用问题跟踪器。

鸣谢

许可

麻省理工学院许可证(MIT)。有关更多信息,请参阅许可证文件