环境说明

windows10
laravel 5.2
php 5.6.15
apache 2.4.17
Homestead v2.1.8

Laravel5.2简单介绍

Laravel 5.2 在 5.1 基础上继续改进和优化:添加多认证驱动支持、隐式模型绑定、简化 Eloquent 全局作用域、可选择的认证脚手架、中间件组、访问频率限制、数组输入验证改进等等。

安装laravel 5.2

在终端通过Composer的create-project命令来安装Laravel5.2应用

路由模型绑定

Laravel 路由模型绑定为注入类实例到路由提供了方便,例如,你可以将匹配给定 ID 的整个 User 类实例注入到路由中,而不是直接注入用户 ID。

隐式绑定

Laravel 会自动解析定义在路由或控制器动作(变量名匹配路由片段)中的 Eloquent 模型类型声明,例如:

在这个例子中,由于类型声明了 Eloquent 模型 App\User,对应的变量名 $user 会匹配路由片段中的{user},这样,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例。

如果数据库中找不到对应的模型实例,会会自动生成 HTTP 404 响应。

自定义键名

如果你想要隐式模型绑定使用数据表的其它字段,可以重写 Eloquent 模型类的 getRouteKeyName 方法:

显式绑定

要注册显式绑定,需要使用路由的 model 方法来为给定参数指定绑定类。应该在 RouteServiceProvider::boot 方法中定义模型绑定:

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

由于我们已经绑定 {user} 参数到 App\User 模型,User 实例会被注入到该路由。因此,如果请求 URL 是 profile/1,就会注入一个用户 ID 为 1 的 User 实例。

如果匹配的模型实例在数据库不存在,会自动生成并返回 HTTP 404 响应。

自定义解析逻辑

如果你想要使用自定义的解析逻辑,需要使用 Route::bind 方法,传递到 bind 方法的闭包会获取到 URI 请求参数中的值,并且返回你想要在该路由中注入的类实例:

自定义“Not Found”

如果你想要指定自己的“Not Found”行为,将封装该行为的闭包作为第三个参数传递给 model 方法:

具体实例

1.链接好数据库,进行数据库的迁移php artisan migrate,在进行数据的创建,在服务端输入php artisan tinker命令,创建数据factory(App\User::class,3)->create();。效果图如下:

enter image description here

2.注册路由,绑定{user}参数到App\User模型下,如下:

3.访问地址http://www.laravel52.com/users/3,这么我们的请求URL是users/3,laravel就会为我们注入一个用户ID为3的实例(注:这个是地址我本地自己配置的虚拟地址),效果如下:

enter image description here

4.如果我们不想用通过id来注入用户实例,而是想通过用户表的某个字段值来方位一个实例,可以通过注册显示绑定来实现。首先,在user表里面加一个字段username,再进行数据表的清除php artisan migrate:refresh再执行步骤一,然后我们找到Providers下的RouteServiceProvider下的boot方法,输入以下代码:

之后我们访问http://www.laravel52.com/users/camila24,就可以看到我们要查看的用户实例了,效果图如下:

enter image description here

总结

  • 在laravel5.1中我们需要使用Route::model方法来告诉laravel注入App\User实例以匹配路由定义中的{user}参数,而在laravel5.2中,框架将会基于 URI 片段自动注入模型,从而允许你便捷访问需要的模型实例。
  • 通过显示绑定我们可以用数据表中的其他字段来访问我们需要查看的实例。

视频地址:https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/1

Tagged:

发表评论

电子邮件地址不会被公开。 必填项已用*标注