PHP Laravel学习之路由模型绑定
官方文档传送门;http://laravelacademy.org/post/7783.html
路由模型绑定
注入模型 ID 到路由或控制器动作时,通常需要查询数据库才能获取相应的模型数据。Laravel 路由模型绑定让注入模型实例到路由变得简单,例如,你可以将匹配给定 ID 的整个 User 类实例注入到路由中,而不只是注入用户 ID。
隐式绑定
Laravel 会自动解析定义在路由或控制器动作(变量名匹配路由片段)中的 Eloquent 模型类型声明
具体实现:
在api.php文件下创建如下代码:
//该类型声明了 Eloquent 模型 App\User
//对应的变量名 $user 会匹配路由片段中的 {user},这样,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例。
Route::get('users/{user}', function (App\User $user) {
dd($user);
});
由于要对数据库进行操作所有要修改根目录下.env的配置文件:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=valet //数据库
DB_USERNAME=root //用户名
DB_PASSWORD=root //密码
使用的数据库可以自己创建也可以用已经有的。
然后基于 Laravel 强大的数据库迁移功能创建 users 表:
php artisan migrate
迁移users表成功
效果图
基于 Laravel 强大的数据库填充器来快速完成数据填充功能,首先通过如下命令生成 users 对应的数据表填充器:
输入命令:
php artisan make:seeder UsersTableSeeder
该命令会在 database/seeds 目录下生成一个 UsersTableSeeder 文件,编辑该文件如下内容:
UserTableSeeder文件
然后修改同文件夹下DatabaseSeeder.php文件如下:
DatabaseSeeder文件
最后执行如下命令:
php artisan db:seed
为表中插入数据显示如下:
最后在浏览器输入:http://localhost:8000/api/users/1显示如下内容:
显示绑定成功
如果出现访问不到页面时因为匹配的模型实例在数据库不存在,请正确查看你的数据库里是否有数据;
显示绑定
有隐式绑定就一定有显示绑定,要注册显式绑定,可以使用路由器的 model 方法来为给定参数指定绑定类,具体实现如下:
1、在app\Providers\RouteServiceProvider.php下RouteServiceProvider 类的 boot 方法中定义显式模型绑定:
显示模型绑定
2、在api下创建一个带{user}参数的路由:
$router->get('profile/{user_model}', function(App\User $user) {
dd($user);
});
由于我们已经绑定 {user_model} 参数到 App\User 模型,User 实例会被注入到该路由。因此,如果请求 URL 是 http://localhost:8000/api/profile/1,就会注入一个用户 ID 为 1 的 User 实例;