echosters/routable

Laravel Eloquent 可路由模型资源模型

v1.1.0 2021-03-15 21:52 UTC

This package is auto-updated.

Last update: 2024-09-16 05:33:23 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。对于重大更改,请首先打开一个问题来讨论你想要进行更改的内容。

许可证

MIT