open-southeners/laravel-model-permalink

为您的应用程序的Eloquent模型添加永久链接

1.1.0 2023-10-31 10:23 UTC

This package is auto-updated.

Last update: 2024-08-30 01:26:47 UTC


README

为您的应用程序的Eloquent模型添加永久链接

入门

composer require open-southeners/laravel-model-permalink

使用

首先运行以下命令以发布配置和必需的迁移文件

php artisan vendor:publish --provider="OpenSoutheners\\LaravelModelPermalink\\ServiceProvider"

然后运行新迁移

php artisan migrate

并将PermalinkAccess接口、HasPermalinks特性和getPermalink方法添加到您希望具有永久链接的模型中

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use OpenSoutheners\LaravelModelPermalink\HasPermalinks;
use OpenSoutheners\LaravelModelPermalink\PermalinkAccess;

class Post extends Model implements PermalinkAccess
{
    use HasPermalinks;

    /**
     * Get permanent link for this model instance.
     */
    public function getPermalink(): string
    {
        // Here is where you return the route that all posts permalinks should use...
        return route('posts.show', $this);
    }
}

现在,要为这个Post或任何配置好的模型生成永久链接,您可以在应用程序代码的任何地方调用以下代码

<?php

use App\Models\Post;
use OpenSoutheners\LaravelModelPermalink\GeneratePermalink;

$post = Post::find(1);

GeneratePermalink::for($post);

// or getting directly the route from returned ModelPermalink object

GeneratePermalink::for($post)->getModelPermalink();

路由权限

此包创建的唯一永久链接路由默认情况下对任何人都是可访问的。

这可以通过以下代码在您的AppServiceProvider或任何其他服务提供商的boot方法中进行配置

use Illuminate\Database\Eloquent\Model;
use App\Models\User;
use Illuminate\Support\Facades\Gate;

Gate::define('viewModelPermalink', function (?User $user, Model $model) {
    // you can replace this with whatever you like...
    return match (get_class($model)) {
        \App\Models\Post::class => $model->author->is($user),
        \App\Models\User::class => $model->is($user),
        default => false,
    };
});

合作伙伴

skore logo

许可证

此软件包是开源软件,根据MIT许可证授权。