# 管理用户
本节与下一节联动,通过添加管理员权限然后对所有用户进行查看,删除等操作。
## 列出用户
非常简单的,我们只需要在控制器里使用模型返回所有值即可。
`application\user\controller\Auth.php`
~~~php
public function index()
{
return User::all();
}
~~~
打开浏览器访问 http://thinkphp.test/user/auth/index ,却直接跳转到“非法操作”的提示,原因在于我们上一节创建用户一致性策略时,判断了传入 `id` 和 `session id` 的一致性,可是在 index 控制器内,我们并没有传入 `id`,那么则会返回 `false`。
`application\behavior\UserPolicy.php`
~~~php
public function run($params)
{
$user_id = Session::get('user.id');
if (!is_null($params)) {
// 存在传入 ID $params
return
(int) $user_id === (int) $params
? true
: false;
} elseif (is_null($user_id)) {
// 用户未登录
return false;
} else {
/**
* 不存在传入 ID 但是用户已登录
* 效果等同于 if(is_null($params) && !is_null($user_id))
*/
return true;
}
}
~~~
再访问 http://thinkphp.test/user/auth/index ,即可看到从数据库拿到的 JSON 数据。
## 创建 Web 页面
`resources\views\user\auth\index.blade.php`
~~~html
@extends('_layout.default')
@section('title', '查看所有用户')
@section('content')
<div class="offset-md-2 col-md-8">
<h2 class="mb-4 text-center">所有用户</h2>
<div class="list-group list-group-flush">
@foreach ($users as $user)
<div class="list-group-item">
<a href="{{ url('user/auth/read', ['id' => $user->id]) }}">
{{ $user->name }}
</a>
</div>
@endforeach
</div>
</div>
@stop
~~~
控制器中传入 users 数据
`application\user\controller\Auth.php`
~~~php
public function index()
{
$this->assign([
'users' => User::all()
]);
return $this->fetch();
}
~~~
访问 http://thinkphp.test/user/auth/index 即可看到刚刚创建好的 Web 页面。
用户页面中,我们可以看到只有仅仅的几条手动创建的数据,数据太少不利于接下来进行删除操作的测试,所以我们添加一个“批量生成用户”的功能。
## 假数据填充
我们现在去创建一个 Users 的数据填充。
1. 键入命令 `php think seed:create Users`
2. 提示 `Create seeds directory? [y]/n (yes/no) [yes]:`
3. 键入 y 并回车
4. 提示创建成功 `created .\database\seeds\Users.php`
打开刚刚创建好的填充文件 `database\seeds\Users.php`
~~~php
<?php
use think\migration\Seeder;
class Users extends Seeder
{
/**
* Run Method.
*
* Write your database seeder using this method.
*
* More information on writing seeders is available here:
* http://docs.phinx.org/en/latest/seeding.html
*/
public function run()
{
$faker = Faker\Factory::create();
$data = [];
for ($i = 0; $i < 200; $i++) {
$data[] = [
'name' => $faker->userName,
'password' => $faker->password,
'email' => $faker->email,
];
}
$this->table('users')->insert($data)->save();
}
}
~~~
以上方法中,我们使用了 `Faker\Factory` 方法,但是现在项目还未安装此包,我们现在在命令行中键入
~~~bash
# 由于 Laravel-China 维护的公共镜像过期,之前在 2.3开发环境搭建 这一节使用的镜像地址请更换为 阿里云镜像。键入命令
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer require fzaninotto/faker
~~~
等待 `faker` 包安装安装完成之后,运行数据填充命令
`php think seed:run`
再次访问 http://thinkphp.test/user/auth/index 则会看到刚刚生成好的假数据。
## 分页
打开控制器 `application\user\controller\Auth.php`
~~~php
public function index()
{
$this->assign([
'users' => User::paginate(10)
]);
return $this->fetch();
}
~~~
`paginate` 为分页方法,参数 10 表示每页提取 10 个。
再打开模板 `resources\views\user\auth\index.blade.php`
~~~html
@extends('_layout.default')
@section('title', '查看所有用户')
@section('content')
<div class="offset-md-2 col-md-8">
<h2 class="mb-4 text-center">
所有用户
</h2>
<div class="list-group list-group-flush">
@foreach ($users as $user)
<div class="list-group-item">
<a href="{{ url('user/auth/read', ['id' => $user->id]) }}">
{{ $user->name }}
</a>
</div>
@endforeach
</div>
<div class="mt-3">
{!! $users !!}
</div>
</div>
@stop
~~~
可以看到,我们在之前的基础上添加了个 `{!! $users !!}`,要说明的是,`{!! !!}` 代表不通过安全过滤直接输出。
如果我们换成 {{ $users }},则会输出已经过滤好的 HTML 代码
`<ul class="pagination"><li class="disabled"><sp...`
现在刷新页面,可以看到已经能够输出分页。可是每次都要通过手动输入链接才能够看到所有用户,这样用户体验不好,现在添加一个所有用户按钮。
`resources\views\_layout\header.blade.php`
~~~html
...
<li class="nav-item">
<a class="nav-link" href="{{ url('welcome/index/help') }}">帮助</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url('welcome/index/about') }}">关于</a>
</li>
+++
<li class="nav-item">
<a class="nav-link" href="{{ url('user/auth/index') }}">所有用户</a>
</li>
+++
...
~~~
现在刷新页面,顶部栏的所有用户按钮就显示出来了,点击进去也就是本节所创建好的页面。
- 第一章. 基础信息
- 1.1 序言
- 1.2 关于作者
- 1.3 本书源码
- 1.4 反馈纠错
- 1.5 安全指南
- 1.6 捐助作者
- 第二章. 开发环境布置
- 2.1 编辑器选用
- 2.2 命令行工具
- 2.3 开发环境搭建
- 2.4 浏览器选择
- 2.5 第一个应用
- 2.6 Git 工作流
- 第三章. 构建页面
- 3.1 章节说明
- 3.2 静态页面
- 3.3 Think 命令
- 3.4 小结
- 第四章. 优化页面
- 4.1 章节说明
- 4.2 样式美化
- 4.3 局部视图
- 4.4 路由链接
- 4.5 用户注册页面
- 4.6 集中视图
- 4.7 小结
- 第五章. 用户模型
- 5.1 章节说明
- 5.2 数据库迁移
- 5.3 查看数据表
- 5.4 模型文件
- 5.5 小结
- 第六章. 用户注册
- 6.1 章节说明
- 6.2 注册表单
- 6.3 用户数据验证
- 6.4 注册失败错误信息
- 6.5 注册成功
- 6.6 小结
- 第七章. 会话管理
- 7.1 章节说明
- 7.2 会话
- 7.3 用户登录
- 7.4 退出
- 7.5 小结
- 第八章. 用户 CRUD
- 8.1 章节说明
- 8.2 重构代码
- 8.3 更新用户
- 8.4 权限系统
- 8.5 列出所有用户
- 8.6 删除用户
- 8.7 访客模式
- 8.8 优化前端
- 8.9 小结
- 第九章. 微博 CRUD
- 9.1 章节说明
- 9.2 微博模型
- 9.3 显示微博
- 9.4 发布微博
- 9.5 微博数据流
- 9.6 删除微博
- 9.7 小结