美文网首页
61. 路由 路由模型绑定

61. 路由 路由模型绑定

作者: 独步天堂 | 来源:发表于2017-10-06 23:51 被阅读117次
  • Laravel 为路由模型绑定提供了一个直接自动将模型实例注入到路由中的方法。

  • Laravel 会自动解析定义在路由或控制器行为中与类型提示的变量名匹配的路由段名称的 Eloquent 模型。例如:

Route::get('api/users/{user}', function (App\User $user) {
    return $user->email;
});

在这个例子中,由于 $user 变量被类型提示为 Eloquent 模型 App\User,变量名称又与 URI 中的 {user} 匹配,因此,Laravel 会自动注入与请求 URI 中传入的 ID 匹配的用户模型实例。如果在数据库中找不到对应的模型实例,将会自动生成 404 异常。

  • 如果你想要模型绑定在检索给定的模型类时使用除 id 之外的数据库字段,你可以在 Eloquent 模型上重写 getRouteKeyName 方法:
/**
 * 为路由模型获取键名。
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

Route::get('/users/{user}', 'UsersController@show')->name('users.show');

...
use App\Models\User;
class UsersController extends Controller
{
    public function create()
    {
        return view('users.create');
    }
    public function show(User $user)
    {
        return view('users.show', compact('user'));
    }
}

在上面代码中,由于 show() 方法传参时声明了类型 —— Eloquent 模型 User,对应的变量名 $user 会匹配路由片段中的 {user},这样,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例。

我们将用户对象 $user 通过 compact 方法转化为一个关联数组,并作为第二个参数传递给 view 方法,将数据与视图进行绑定。

在视图模板中就可以使用 {{ $user->name }} 显示数据内容。


  • 要注册显式绑定,使用路由器的 model 方法来为给定参数指定类。在 RouteServiceProvider 类中的 boot 方法内定义这些显式模型绑定:
public function boot()
{
    parent::boot();

    Route::model('user', App\User::class);
}

接着,定义一个包含 {user} 参数的路由:

Route::get('profile/{user}', function (App\User $user) {
    //
});

因为我们已经将所有 {user} 参数绑定至 App\User 模型,所以 User 实例将被注入该路由。例如,profile/1 的请求会注入数据库中 ID 为 1 的 User 实例。

  • 如果你想要使用自定义的解析逻辑,就使用 Route::bind 方法。传递到 bind 方法的闭包会接受 URI 中大括号对应的值,并且返回你想要在该路由中注入的类的实例:
public function boot()
{
    parent::boot();

    Route::bind('user', function ($value) {
        return App\User::where('name', $value)->first();
    });
}

相关文章

  • 61. 路由 路由模型绑定

    Laravel 为路由模型绑定提供了一个直接自动将模型实例注入到路由中的方法。 Laravel 会自动解析定义在路...

  • Laravel 学习日记2018-06-26

    什么是隐性路由模型绑定 我个人理解,首先是路由模型,路由模型就是在路由里面使用的模型,隐性这个功能就是larave...

  • Laravel 5.2 新特性

    路由模型绑定 路由直接绑定模型,直接返回根据路由url 的格式的数据,省略了一步写查询的操作。下面看个例子: 如果...

  • thinkphp5模型绑定的解释

    路由规则和分组支持绑定模型数据,例如: 会自动给当前路由绑定 id为 当前路由变量值的User模型数据。就是自动读...

  • 需要在服务提供这里boot 的事项

    模型路由绑定 视图合成器

  • thinkphp5学习笔记(三)路由配置

    URL请求的执行流程 路由模式 路由注册 路由规则 路由地址 路由参数 变量规则 路由分组 别名路由 路由绑定

  • laravel 近期版本新特性总结

    version 5.2 路由模型绑定 请求次数限制 middleware throttle:3,1 thrott...

  • Laravel框架基础学习

    1.路由设置 路由和控制器绑定。 视图 - 使用模板 Model - 模型 连接数据库 数据库操作 - 查询构造器...

  • PHP Laravel学习之路由模型绑定

    官方文档传送门;http://laravelacademy.org/post/7783.html 路由模型绑定 注...

  • 路由组件传参

    路由组件传参 我们通常把路由直接映射(绑定)的组件称为路由组件,也只有路由组件才能直接调用路由有关对象:$rout...

网友评论

      本文标题:61. 路由 路由模型绑定

      本文链接:https://www.haomeiwen.com/subject/hjcdyxtx.html