1. 程式人生 > >Laravel 第三方擴充套件 整理

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 是否含有指定的字元;