open-southeners / laravel-model-permalink
为您的应用程序的Eloquent模型添加永久链接
1.1.0
2023-10-31 10:23 UTC
Requires
- php: ^8.0
- illuminate/database: ^9.0 || ^10.0
- illuminate/support: ^9.0 || ^10.0
Requires (Dev)
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^7.0 || ^8.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.0 || ^10.0
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, }; });
合作伙伴
许可证
此软件包是开源软件,根据MIT许可证授权。