- 前面写了对表单提交的数据进行验证可以解决用户表单输入数据的规范性问题,但是在非表单的情况下我们也希望给用户个提示。
- 例如:数量在不足的情况用户点击能够给用户提示,在用户非数据提交的情况下也能有一个比较好的用户体验
这里我们就可以使用异常来进行处理,新建一个异常类
<?php
namespace App\Exceptions;
use Illuminate\Http\Request;
use Throwable;
class TestException extends \Exception
{
public function __construct(string $message = "", int $code = 403, Throwable $previous = null)
{
parent::__construct($message, $code, $previous);
}
// 当这个异常被触发时,会调用 render 方法来输出给用户
public function render(Request $request)
{
// 如果用户通过 Api 请求,则返回 JSON 格式的错误信息
if ($request->expectsJson()) {
return response()->json(['msg' => $this->message], $this->code);
}
// 否则返回上一页并带上错误信息
return redirect()->back()->withErrors(['error' => $this->message]);
}
}
控制器使用
public function w(Request $request)
{
return view('exp');
}
public function tt(Request $request)
{
if (true){
throw new TestException("此订单已经过期");
}
}
页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{
{
$error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="/tt" method="post">
@csrf
<button type="submit">点击</button>
</form>
</body>
</html>
效果