echosters / routable
Laravel Eloquent 可路由模型资源模型
v1.1.0
2021-03-15 21:52 UTC
README
Routable 是一个用于处理资源模型路由的 Laravel 扩展包。
安装
使用 composer 安装 routable。
composer require echosters/routable
配置
在你的 config\app.php
文件中的 providers
添加
'providers' => [ ..., Echosters\Routable\Providers\RoutableServiceProvider::class, ];
准备你的模型
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Echosters\Routable\Routable; class YourModel extends Model { use Routable; }
用法
$user = User::find(1); $user->getRoute('edit'); // the same of route('users.edit',$user->id)
方法
getRoutes()
User::find(1)->getRoutes(); Array [ "edit" => "http://example.com/users/1/edit" "update" => "http://example.com/users/1" "show" => "http://example.com/users/1" "destroy" => "http://example.com/users/1" "store" => "http://example.com/users" "index" => "http://example.com/users" ]
getRoute($route)
User::find(1)->getRoute('show'); string "http://example.com/users/1"
getResourceRoute($route)
User::getResourceRoute('index'); string "http://example.com/users"
参数
你可以通过将参数作为数组传递给第二个参数,将任何额外的参数传递给任何路由。
User::find(1)->getRoute('show',['highlight' => 'true']); // "http://example.com/users/1?highlight=true" User::find(1)->getRoutes('show',['highlight' => 'false']); // "http://example.com/users/1?highlight=false" User::getResourceRoute('index',['id' => '1']); // "http://example.com/users?id=1"
注意
命名约定
如果你想覆盖这个命名约定,你可以在你的模型中添加 getRouteName 方法。
getRouteName
public function getRouteName() { return 'custom-users'; } //Then $user = User::find(1); $user->getRoute('edit'); //will generate 'http://example.com/en/custom-users/1'
固定本地化参数
如果你使用本地化参数,只需按以下方式在你的模型中添加它们
getFixedParameter
public function getFixedParameter() { return [ 'locale' => 'en', ]; } //Then $user = User::find(1); $user->getRoute('edit'); //will generate 'http://example.com/en/users/1'
关系
如果你有一个如下所示的关系 App\Models\Post.php
public function user() { return $this->belongsTo(User::class); }
如果你的网站看起来像这样
Route::resource('{user}/posts',PostsController::class);
所以,在你的 App\Models\Post.php
模型中
public function getFixedParameter() { return [ 'user' => $this->user->id,// Or $this->user, ]; } //Then $post = Post::find(1); // Known that $post->user->id = 22; $post->getRoute('show'); //will generate 'http://example.com/22/posts/1'
贡献
欢迎提交 pull request。对于重大更改,请首先打开一个问题来讨论你想要进行更改的内容。