自动为模型和枚举创建路由,以便在Laravel支持的SPA前端中引用

1.2.0 2024-06-14 10:39 UTC

This package is auto-updated.

Last update: 2024-09-11 20:56:55 UTC


README

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

要在一个SPA表单中填充下拉菜单(或其他引用方式),可以使用一个单独的端点来创建名称/值对的数组。此包允许您自动为您的模型和枚举创建路由,以便在Laravel支持的SPA前端中引用。

安装

您可以通过composer安装此包

composer require perfect-drive/referable

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

php artisan vendor:publish --tag="referable-config"

这是发布配置文件的内容

return [
    /*
     * The directories to search for Referable classes.
     */
    'directories' => [
        app_path('Enums'),
        app_path('Models'),
    ],

    /*
     * The middleware array to use for the Referable routes.
     */
    'middleware' => ['api', 'auth:sanctum'],

    /*
     * The key name to use for the referable key in the json response.
     */
    'key_name' => 'value',

    /*
     * The value name to use for the referable value in the json response.
     */
    'value_name' => 'title',

    /*
     * The base url for the referable routes.
     */
    'base_url' => 'spa/referable/',
];

用法

在模型上

<?php

declare(strict_types=1);

namespace App\Models;

use App\Interfaces\ReferableInterface;
use App\Traits\ReferableModel;
use Illuminate\Database\Eloquent\Model;

class ProjectType extends Model implements ReferableInterface
{
    use ReferableModel;

这将注册以下路由

GET /spa/referable/project_type

在枚举上

<?php

declare(strict_types=1);

namespace App\Enums\User;

use App\Interfaces\ReferableInterface;
use App\Traits\ReferableEnum;

enum UserStatus: string implements ReferableInterface
{
    use ReferableEnum;

这将注册以下路由

GET /spa/referable/user_status

模型作用域

可以使用'ReferableScope'属性来定义一个自定义作用域(在模型上),用于过滤可引用项并为其创建一个附加路由。

#[ReferableScope]
public function scopeActive(Builder $query): Builder
{
    return $query->where('active', true);
}

这将注册以下路由

GET /spa/referable/project_type/active

枚举作用域

您可以使用'ReferableScope'属性来定义一个自定义作用域方法(在枚举上),用于过滤可引用项并为其创建一个附加路由。

#[ReferableScope]
public function active(): bool
{
    return in_array($this, [
        self::FIRST,
        self::SECOND,
    ], true);
}

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

安全漏洞

如果您发现任何与安全相关的问题,请发送电子邮件至carl.klein@perfect-drive.nl

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。