Laravel 第三方擴充套件 整理
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 是否含有指定的字元;