marko298/nova-single-record-resource

Laravel Nova 单记录资源。在导航栏中直接显示链接到资源的唯一记录

v1.1.2 2020-09-28 19:54 UTC

This package is auto-updated.

Last update: 2024-08-29 05:01:01 UTC


README

License Latest Version on Packagist Total Downloads StyleCI

来自 marko298/nova-single-record-resource 的分支

添加了创建直接链接到资源详情页的能力。适用于将只包含单个记录的模型。

先决条件

安装

$ composer require marko298/nova-single-record-resource

SupportSingleRecordNavigationLinks 特性添加到资源中

<?php

namespace App\Nova;

use Marko298\NovaSingleRecordResource\Traits\SupportSingleRecordNavigationLinks;
use Laravel\Nova\Resource as NovaResource;

abstract class Resource extends NovaResource
{
    use SupportSingleRecordNavigationLinks;

    ...
}

发布资产

$ php artisan vendor:publish --provider="Marko298\NovaSingleRecordResource\Providers\NovaSingleRecordResourceServiceProvider"

更新

在更新时,重要的一步是重新发布资产,如下所示

$ php artisan vendor:publish --force --provider="Marko298\NovaSingleRecordResource\Providers\NovaSingleRecordResourceServiceProvider"

卸载

从 composer 中移除

$ composer remove marko298/nova-single-record-resource

从您的 Nova 资源中移除 SupportSingleRecordNavigationLinks 特性

use SupportSingleRecordNavigationLinks;

移除自定义的导航模板

rm resources/views/vendor/nova/resources/navigation.blade.php

使用方法

将以下方法放置在只有一个记录的模型上。

class MyResource extends Resource
{
    public static function singleRecord(): bool
    {
        return true;
    }
}

可选地覆盖资源标识符。

class MyResource extends Resource
{
    /**
     * @return string|int
     */
    public static function singleRecordId(): bool
    {
        return 1;
    }
}

工作原理

Laravel Nova 有能力覆盖用于渲染导航侧边栏的 Blade 模板。该模板是从 Nova 版本 v1.2.0 复制的,并添加了少量代码以支持将资源直接链接到详情视图。当使用标签 nova-views 发布供应商资产时,模板将被放置在项目的 resources/views/vendor/nova/resources 文件夹中。

视图更改
@if (method_exists($resource, 'singleRecord') && $resource::singleRecord())
    <router-link :to="{
    name: 'detail',
    params: {
        resourceName: '{{ $resource::uriKey() }}',
        resourceId: {{ $resource::singleRecordId() }}
    }
}" class="text-white text-justify no-underline dim">
        {{ $resource::label() }}
    </router-link>
@else
    <router-link :to="{
    name: 'index',
    params: {
        resourceName: '{{ $resource::uriKey() }}'
    }
}" class="text-white text-justify no-underline dim">
        {{ $resource::label() }}
    </router-link>
@endif