PHP Laravel学习之路由模型绑定

2018-07-18  本文已影响0人  唐朝早晨

官方文档传送门;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 实例;

上一篇下一篇

猜你喜欢

热点阅读