larabbs 使用的一些擴充總結

EDISONYANG發表於2018-11-05

Laravel Mix

Laravel Mix 一款前端任務自動化管理工具,使用了工作流的模式對制定好的任務依次執行。Mix 提供了簡潔流暢的 API,讓你能夠為你的 Laravel 應用定義 Webpack 編譯任務。Mix 支援許多常見的 CSS 與 JavaScript 前處理器,通過簡單的呼叫,你可以輕鬆地管理前端資源。

  1. 加速 yarn config set registry https://registry.npm.taobao.org
  2. 安裝 yarn install
  3. 執行 npm run watch-poll

windows系統報錯解決方案


驗證碼擴充

mews/captcha
安裝
composer require "mews/captcha:~2.0"
執行以下命令生成配置檔案 config/captcha.php:
php artisan vendor:publish --provider='Mews\Captcha\CaptchaServiceProvider'
vi config/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,
    ]
];

可以看到這些配置選項都非常通俗易懂,characters 選項是用來顯示給使用者的所有字串,default, flat, mini, inverse 分別是定義的四種驗證碼型別,你可以在此修改對應選項自定義驗證碼的長度、背景顏色、文字顏色等屬性


語言包

overtrue/laravel-lang

composer require "overtrue/laravel-lang:~3.0"


Carbon 時間操作擴充

Carbon

Laravel 將其預設整合到了框架中
預設情況是英文的,如果要使用中文時間提示,則需要對 Carbon 進行本地化設定。
app/Providers/AppServiceProvider.php

.
.
.
public function boot()
{
//
\Carbon\Carbon::setLocale('zh');
}
.
.
.

處理圖片裁切的邏輯

Intervention/image

安裝 composer require intervention/image

獲取配置資訊 php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"

開啟 config/image.php 檔案可以看到只有一個驅動器的選項,支援的值有 GD 庫 和 ImageMagic


程式碼生成器

Laravel 5.x Scaffold Generator

安裝

composer require "summerblue/generator:~0.5" --dev

示例

php artisan make:scaffold Topic --schema="
title:string:index,
body:text,
user_id:integer:unsigned:index,
category_id:integer:unsigned:index,
reply_count:integer:unsigned:default(0),
view_count:integer:unsigned:default(0),
last_reply_user_id:integer:unsigned:default(0),
order:integer:unsigned:default(0),
excerpt:text:nullable,
slug:string:nullable"
"
程式碼生成器為我們做了哪些事情:
  • 建立話題的資料庫遷移檔案 —— 2017_09_26_111713_create_topics_table.php;
  • 建立話題資料工廠檔案 —— TopicFactory.php;
  • 建立話題資料填充檔案 —— TopicsTableSeeder.php;
  • 建立模型基類檔案 —— Model.php, 並建立話題資料模型;
  • 建立話題控制器 —— TopicsController.php;
  • 建立表單請求的基類檔案 —— Request.php,並建立話題表單請求驗證類;
  • 建立話題模型事件監控器 TopicObserver 並在 AppServiceProvider 中註冊;
  • 建立授權策略基類檔案 —— Policy.php,同時建立話題授權類,並在 AuthServiceProvider 中註冊;
  • 在 web.php 中更新路由,新增話題相關的資源路由;
  • 新建符合資源控制器要求的三個話題檢視檔案,並存放於 resources/views/topics 目錄中;
  • 執行了資料庫遷移命令 artisan migrate;
  • 因此次操作新建了多個檔案,最終執行 composer dump-autoload 來生成 classmap。

Laravel 開發者工具類

laravel-debugbar

安裝

composer require "barryvdh/laravel-debugbar:~3.1" --dev

生成配置檔案,存放位置 config/debugbar.php:

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

開啟 config/debugbar.php,將 enabled 的值設定為:

'enabled' => env('APP_DEBUG', false),


導航的 Active 狀態判斷

安裝

composer require "hieu-le/active:~3.5"

示例


<li class="{{ active_class(if_route('topics.index')) }}"><a href="{{ route('topics.index') }}">話題</a></li>
<li class="{{ active_class((if_route('categories.show') && if_route_param('category', 1))) }}"><a href="{{ route('categories.show', 1) }}">分享</a></li>
<li class="{{ active_class((if_route('categories.show') && if_route_param('category', 2))) }}"><a href="{{ route('categories.show', 2) }}">教程</a></li>
<li class="{{ active_class((if_route('categories.show') && if_route_param('category', 3))) }}"><a href="{{ route('categories.show', 3) }}">問答</a></li>
<li class="{{ active_class((if_route('categories.show') && if_route_param('category', 4))) }}"><a href="{{ route('categories.show', 4) }}">公告</a></li>

擴充套件包提供了一批函式讓我們更方便的進行 $condition 判斷:

  1. if_route() - 判斷當前對應的路由是否是指定的路由;
  2. if_route_param() - 判斷當前的 url 有無指定的路由引數。
  3. if_query() - 判斷指定的 GET 變數是否符合設定的值;
  4. if_uri() - 判斷當前的 url 是否滿足指定的 url;
  5. if_route_pattern() - 判斷當前的路由是否包含指定的字元;
  6. if_uri_pattern() - 判斷當前的 url 是否含有指定的字元;

Simditor編輯器

點選此處下載 Simditor

編輯器文件


XSS 安全漏洞

XSS 也稱跨站指令碼攻擊 (Cross Site Scripting),惡意攻擊者往 Web 頁面裡插入惡意 JavaScript 程式碼,當使用者瀏覽該頁之時,嵌入其中 Web 裡面的 JavaScript 程式碼會被執行,從而達到惡意攻擊使用者的目的。

一種比較常見的 XSS 攻擊是 Cookie 竊取。我們都知道網站是通過 Cookie 來辨別使用者身份的,一旦惡意攻擊者能在頁面中執行 JavaScript 程式碼,他們即可通過 JavaScript 讀取並竊取你的 Cookie,拿到你的 Cookie 以後即可偽造你的身份登入網站。(擴充套件閱讀 —— IBM 文件庫:跨站點指令碼攻擊深入解析

有兩種方法可以避免 XSS 攻擊:

第一種,對使用者提交的資料進行過濾;
第二種,Web 網頁顯示時對資料進行特殊處理,一般使用 htmlspecialchars() 輸出。

HTMLPurifier

HTMLPurifier 本身就是一個獨立的專案,運用『白名單機制』對 HTML 文字資訊進行 XSS 過濾。

『白名單機制』指的是使用配置資訊來定義『HTML 標籤』、『標籤屬性』和『CSS 屬性』陣列,在執行 clean() 方法時,只允許配置資訊『白名單』裡出現的元素通過,其他都進行過濾。

如配置資訊:

'HTML.Allowed' => 'div,em,a[href|title|style],ul,ol,li,p[style],br',
'CSS.AllowedProperties'    => 'font,font-size,font-weight,font-style,font-family',

當使用者提交時

<a someproperty="somevalue" href="http://example.com" style="color:#ccc;font-size:16px">
    文章內容<script>alert('Alerted')</script>
</a>

會被解析為

<a href="http://example.com" style="font-size:16px">
    文章內容
</a>

以下內容因為未指定會被過濾:

  1. someproperty 未指定的 HTML 屬性
  2. color 未指定的 CSS 屬性
  3. script 未指定的 HTML 標籤

HTMLPurifier for Laravel 5

HTMLPurifier for Laravel 是對 HTMLPurifier 針對 Laravel 框架的一個封裝

  1. 安裝 HTMLPurifier for Laravel 5
    composer require "mews/purifier:~2.0"
  2. 配置 HTMLPurifier for Laravel 5
    php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
  3. 配置檔案在: config/purifier.php

SEO 友好的 URL

翻譯處理器

  1. 安裝依賴 Guzzle
    Guzzle 庫是一套強大的 PHP HTTP 請求套件,我們使用 Guzzle 的 HTTP 客戶端來請求 百度翻譯 介面。
    使用 Composer 安裝 Guzzle 類庫:
    composer require "guzzlehttp/guzzle:~6.3"
  2. 安裝依賴 PinYin
    PinYin安正超 開發的,基於 CC-CEDICT 詞典的中文轉拼音工具,是一套優質的漢字轉拼音解決方案。我們使用 PinYin 來作為翻譯的後備計劃,當百度翻譯 API 不可用時,程式會自動使用 PinYin 漢字轉拼音方案來生成 Slug。
    composer require "overtrue/pinyin:~3.0"
  3. 百度翻譯 API 配置

佇列監控 Horizon

Redis佇列驅動器

composer require "predis/predis:~1.0"

Horizon 是 Laravel 生態圈裡的一員,為 Laravel Redis 佇列提供了一個漂亮的儀表板,允許我們很方便地檢視和管理 Redis 佇列任務執行的情況。

使用 Composer 安裝:

composer require "laravel/horizon:~1.0"

釋出檔案

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

配置檔案 config/horizon.php 和存放在 public/vendor/horizon 資料夾中的 CSS 、JS 等頁面資原始檔。

線上部署須知

  1. 使用 Supervisor 程式工具進行管理,配置和使用請參照 文件 進行配置;
  2. 每一次部署程式碼時,需 artisan horizon:terminate 然後再 artisan horizon 重新載入程式碼。

許可權管理擴充包

Laravel-permission

1. 安裝擴充套件包

1.安裝

composer require "spatie/laravel-permission:~2.7"

2.生成資料庫遷移檔案

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

image

資料表各自的作用:

  • roles —— 角色的模型表;
  • permissions —— 許可權的模型表;
  • model_has_roles —— 模型與角色的關聯表,使用者擁有什麼角色在此表中定義,一個使用者能擁有多個角色;
  • role_has_permissions —— 角色擁有的許可權關聯表,如管理員擁有檢視後臺的許可權都是在此表定義,一個角色能擁有多個許可權;
  • model_has_permissions —— 模型與許可權關聯表,一個模型能擁有多個許可權。

3.資料遷移

php artisan migrate

4.生成配置資訊

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

配置資訊存放於 config/permission.php


使用者切換工具 sudo-su

  1. 安裝
    composer require "viacreative/sudo-su:~1.1"
  2. 新增 Provider

    app/Providers/AppServiceProvider.php

    <?php
    .
    .
    .
    class AppServiceProvider extends ServiceProvider
    {
    .
    .
    .
    public function register()
    {
    if (app()->isLocal()) {
    $this->app->register(\VIACreative\SudoSu\ServiceProvider::class);
    }
    }
    }
  3. 釋出資原始檔
    php artisan vendor:publish --provider="VIACreative\SudoSu\ServiceProvider"
    會生成:

    /public/sudo-su 前端 CSS 資源存放資料夾;
    config/sudosu.php 配置資訊檔案

  4. 修改配置檔案

    config/sudosu.php

    <?php
    return [
    // 允許使用的頂級域名
    'allowed_tlds' => ['dev', 'local', 'test'],
    // 使用者模型
    'user_model' => App\Models\User::class
    ];
  5. 模板植入
    @if (app()->isLocal())
        @include('sudosu::user-selector')
    @endif

你可以不平凡

相關文章