CI框架处理请求的逻辑
CI框架请求的处理逻辑与步骤
跟着视频学了好几个请求的处理,比如登录,忘记密码,重置密码等。大致思考一下这种框架的通用逻辑,方便后面再写的时候比对。
请求进入路由
先要维护对应的Routes.php
文件,比如下面这一串请求。设置对应的get/post方法,
1 | $routes->group('', ['filter' => 'cifilter:guest'], static function ($routes) { |
第一个参数是url的访问路径,第二个对应控制器的相应方法,as
方法可以将routes 命名一个简单命令,这样在其他地方可以直接引用。例如在view中引用 <form action="<?= route_to('send-password-reset-link');?>" method="POST">
在参数里可以设置对应的filter 在/Config/Filter.php
进行注册
1 | public array $aliases = [ |
路由转入控制器
建立相应的控制器以及方法,同时进行相应的逻辑判定。
- 在控制器里面,需要注意可以加载相应的helper 类供后面使用。
protected $helpers = ['url', 'form', 'CIMail'];
例如,加载url, form和CIMail这个helper类,其中CIMail为自己创建的文件。 - 在控制器里面,可以使用validate方法,但是如果有自己创建的类,需要在
/Config/Validation.php
里面注册相应的类。之后再function里面就可以调用IsPasswordStrong1
2
3
4
5
6
7public array $ruleSets = [
Rules::class,
FormatRules::class,
FileRules::class,
CreditCardRules::class,
IsPasswordStrong::class,
];1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$isValid = $this->validate([
'new_password' => [
'rules' => 'required|min_length[5]|max_length[20]|is_password_strong[new_password]',
'errors' => [
'required' => 'Enter new password',
'min_length' => 'New password must have at least 5 characters',
'max_length' => 'New password must have at most 20 characters',
'is_password_strong' => 'new password is not strong enough',
]
],
'confirm_new_password' => [
'rules' => 'required|matches[new_password]',
'errors' => [
'required' => 'Confirm new password',
'matches' => 'Passwords not match',
]
]
]);
控制器进行跳转View
常用的返回跳转有。
- 直接返回view界面 并且附带数据。
1
2
3
4
5
6
7
8public function loginForm()
{
$data = [
'pageTitle' => 'Login',
'validation' => null
];
return view('backend/pages/auth/login', $data);
} - 返回跳转到指定的route.
使用这个方法可以跳转到admin.forot.form
路由并附带一个success信息1
return redirect()->route('admin.forgot.form')->with('success', 'We have email your password reset link')
- 返回上一个界面
返回上一个界面并且将之前的输入信息返回,同时附带fail提示信息1
return redirect()->back()->with('fail','Something went wrong!')->withInput();
View界面展示
附带flash data的展示
1
2
3
4
5
6
7
8if (!empty(session()->getFlashdata('fail'))) :
<div class="alert alert-danger">
<?= session()->getFlashdata('fail'); ?>
<button type="button" class="close" data-dismiss="alert" aria-label="close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>传入变量的引用。
1 | //控制器传入View 的数据 |
- Validation部分的引用
在view里面设置了validation变量,再从控制器的方法中传入validator, 在view界面进行error读取。
- controller里面的设置
1
2
3
4
5
return view('backend/pages/auth/login', [
'pageTitle' => 'Login',
'validation' => $this->validator,
]); - View界面的读取验证错误结果
1
2
3
4
5
6
7
8//先初始化一个validation
$validation = \Config\Services::validation();
if ($validation->getError('login_id')) :
<div class="d-block text-danger" style="margin-top:-25px; margin-bottom:15px">
<?= $validation->getError('login_id'); ?>
</div>
<?php endif; ?>
总结
透过这段逻辑就实现了从请求到路由到控制器再到view展示的步骤。对于MVC来说,model部分是和controller里面进行交互处理。所以并未特别备注。后面再研究一下model的交互。
评论
评论插件加载失败
正在加载评论插件