larabbs 使用的一些拓展总结

Laravel 项目中用到的第三方扩展包及一些问题


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
本作品采用《CC 协议》,转载必须注明作者和本文链接
你可以不平凡
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!