1, Laravel 中的验证码功能
我们将以第三方扩展包 mews/captcha 作为基础来实现 Laravel 中的验证码功能。我们将以第三方扩展包 mews/captcha 作为基础来实现 Laravel 中的验证码功能。
- composer require “mews/captcha:~2.0”
运行
- php artisan vendor:publish 生成配置文件 config/captcha.php。
captcha.php 配置文件 内容如下:
<?php
return [
'characters' => '2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ',
'default' => [
'length' => 5,
'width' => 120,
'height' => 36,
'quality' => 90,
],
'flat' => [
'length' => 6,
'width' => 160,
'height' => 46,
'quality' => 90,
'lines' => 6,
'bgImage' => false,
'bgColor' => '#ecf2f4',
'fontColors'=> ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
'contrast' => -5,
],
'mini' => [
'length' => 3,
'width' => 60,
'height' => 32,
],
'inverse' => [
'length' => 5,
'width' => 120,
'height' => 36,
'quality' => 90,
'sensitive' => true,
'angle' => 12,
'sharpen' => 10,
'blur' => 2,
'invert' => true,
'contrast' => -5,
]
];
- 模板文件 引入
<div class="form-group {{ $errors->has('captcha') ? ' has-error' : '' }}">
<label for="captcha" class="col-md-4 control-label">验证码</label>
<div class="col-md-6">
<input id="captcha" class="form-control" name="captcha" >
<img class="thumbnail captcha" src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
@if ($errors->has('captcha'))
<span class="help-block">
<strong>{{ $errors->first('captcha') }}</strong>
</span>
@endif
</div>
</div>
captcha_src() 方法是 mews/captcha 提供的辅助方法,用于生成验证码图片链接;
『验证码』区块中 onclick() 是 JavaScript 代码,实现了点击图片重新获取验证码的功能,允许用户在验证码太难识别的情况下换一张图片试试。1. captcha_src()
方法是
[mews/captcha](https://github.com/mewebstudio/captcha)
提供的辅助方法,用于生成验证码图片链接;
2. 『验证码』区块中
onclick()
是 JavaScript 代码,实现了点击图片重新获取验证码的功能,允许用户在验证码太难识别的情况下换一张图片试试。
2.语言包
GitHub 上有开发者专门为此写了一个扩展包 - overtrue/laravel-lang 来对 Laravel 提供默认提示信息添加多语言版本翻译。
3.图片上传工具类
namespace App\Handlers;
class ImageUploadHandler
{
// 只允许以下后缀名的图片文件上传
protected $allowed_ext = ["png", "jpg", "gif", 'jpeg'];
public function save($file, $folder, $file_prefix)
{
// 构建存储的文件夹规则,值如:uploads/images/avatars/201709/21/
// 文件夹切割能让查找效率更高。
$folder_name = "uploads/images/$folder/" . date("Ym", time()) . '/'.date("d", time()).'/';
// 文件具体存储的物理路径,`public_path()` 获取的是 `public` 文件夹的物理路径。
// 值如:/home/vagrant/Code/larabbs/public/uploads/images/avatars/201709/21/
$upload_path = public_path() . '/' . $folder_name;
// 获取文件的后缀名,因图片从剪贴板里黏贴时后缀名为空,所以此处确保后缀一直存在
$extension = strtolower($file->getClientOriginalExtension()) ?: 'png';
// 拼接文件名,加前缀是为了增加辨析度,前缀可以是相关数据模型的 ID
// 值如:1_1493521050_7BVc9v9ujP.png
$filename = $file_prefix . '_' . time() . '_' . str_random(10) . '.' . $extension;
// 如果上传的不是图片将终止操作
if ( ! in_array($extension, $this->allowed_ext)) {
return false;
}
// 将图片移动到我们的目标存储路径中
$file->move($upload_path, $filename);
return [
'path' => config('app.url') . "/$folder_name/$filename"
];
}
}
4.图片裁剪包
Intervention/image 扩展包来处理图片裁切的逻辑 Intervention/image
扩展包来处理图片裁切的逻辑
Composer 安装
- composer require intervention/image
执行以下命令获取配置信息
- php artisan vendor:publish –provider=”Intervention\Image\ImageServiceProviderLaravel5”
打开 config/image.php 文件可以看到只有一个驱动器的选项,支持的值有 GD 库 和 ImageMagic打开
config/image.php
文件可以看到只有一个驱动器的选项,支持的值有
public function reduceSize($file_path, $max_width)
{
// 先实例化,传参是文件的磁盘物理路径
$image = Image::make($file_path);
// 进行大小调整的操作
$image->resize($max_width, null, function ($constraint) {
// 设定宽度是 $max_width,高度等比例双方缩放
$constraint->aspectRatio();
// 防止裁图时图片尺寸变大
$constraint->upsize();
});
// 对图片修改后进行保存
$image->save();
}
5.导航栏 动态选中样式
通过判断『路由命名』和『路由参数』为导航栏添加 active 类,接下来我们使用一个很方便的类库来辅助我们实现此功能
使用 Composer 安装:
- composer require “hieu-le/active:~3.5”
安装完成后,在模板中使用
<li class="{{ active_class((if_route('categories.show') && if_route_param('category', 1))) }}"><a href="{{ route('categories.show', 1) }}">分享</a></li>
- function active_class( condition, activeClass = ‘active’, $inactiveClass = ”)
if_route() - 判断当前对应的路由是否是指定的路由;
if_route_param() - 判断当前的 url 有无指定的路由参数。
if_query() - 判断指定的 GET 变量是否符合设置的值;
if_uri() - 判断当前的 url 是否满足指定的 url;
if_route_pattern() - 判断当前的路由是否包含指定的字符;
if_uri_pattern() - 判断当前的 url 是否含有指定的字符;