我们一步一步来讲解如何在Laravel 5.4中生成验证码。
1. 安装 Laravel
首先需要安装 Laravel,如果你已经安装过 Laravel,可以跳过这一步。在命令行中进入目标文件夹,然后执行以下命令来安装 Laravel:
composer create-project --prefer-dist laravel/laravel project-name
其中 project-name
是你的项目名称,可以按照实际情况来填写。
2. 安装验证码库
Laravel 已经集成了一个 Intervention Image 的库,可以用来生成验证码。我们需要先安装这个库。在命令行中进入你的 Laravel 项目目录,然后执行以下命令:
composer require intervention/image
这将会在你的项目中安装 Intervention Image。
3. 生成验证码
我们将创建一个控制器 CaptchaController
来生成验证码。进入 Laravel 项目的根目录,然后在命令行中执行以下命令来创建控制器:
php artisan make:controller CaptchaController
然后修改 CaptchaController
的代码,添加 generate
方法来生成验证码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
class CaptchaController extends Controller
{
public function generate(Request $request)
{
// 生成验证码
$captcha = str_random(4);
// 保存验证码到 session
$request->session()->put('captcha', $captcha);
// 生成图片
$img = Image::make(public_path('images/captcha_bg.png'))
->text($captcha, 120, 60, function($font) {
$font->color('#000');
$font->size(40);
})
->response('png');
return response($img)->header('Content-type', 'image/png');
}
}
这个方法首先会生成一个 4 位的随机数作为验证码,并将其保存到 session 中。然后使用背景图 captcha_bg.png
和 Intervention Image
库来生成一张带有验证码的图片,并返回图片。其中,text
方法用来设置文本属性,比如颜色、大小等。
4. 修改路由
现在我们需要将 /captcha
的请求路由到 CaptchaController
的 generate
方法。打开 routes/web.php
文件,添加以下路由:
Route::get('/captcha', 'CaptchaController@generate');
5. 使用验证码
现在,你可以在表单中使用生成的验证码了。首先在表单中添加一个图片元素,用来展示验证码图片:
<img src="/captcha" alt="验证码">
然后添加一个文本框,用来输入验证码:
<input type="text" name="captcha" required>
然后在表单提交时,你需要检查用户输入的验证码是否正确。我们可以在控制器中添加一个 check
方法:
public function check(Request $request)
{
// 获取用户输入的验证码
$captcha = $request->get('captcha');
// 获取 session 中保存的验证码
$session_captcha = $request->session()->get('captcha');
// 检查验证码是否正确
if ($captcha !== $session_captcha) {
return back()->withInput()->withErrors(['验证码错误']);
}
// 验证通过
// ...
}
这个方法首先获取用户输入的验证码和 session 中保存的验证码,并进行比较。如果验证码错误,则返回错误信息。如果验证通过,则可以接着做其他的操作。当然,你需要在表单提交时将请求发送到这个方法。
6. 示例
以下是一个简单的示例,展示了如何使用生成的验证码:
<form action="/submit" method="post">
{{ csrf_field() }}
<label>
图片验证码:
<img src="/captcha" alt="验证码">
</label>
<input type="text" name="captcha" required>
<button type="submit">提交</button>
</form>
在表单提交时,需要将请求发送到 check
方法:
Route::post('/submit', 'CaptchaController@check');
以上就是如何在 Laravel 5.4 中生成验证码的完整攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:laravel5.4生成验证码的实例讲解 - Python技术站