# 扩展列表

下面是常用的Laravel扩展包

houdunren.com (opens new window) @ 向军大叔

xj-small

有些扩展包在 doc.houdunren.com 文档库有使用说明。其他请查看插件官方文档

扩展包 说明
laravel-lang/lang (opens new window) 语言包
endroid/qr-code (opens new window) 二维码生成
erusev/parsedown (opens new window) Markdown解析器
hieu-le/active (opens new window) URL请求判断
hisorange/browser-detect (opens new window) 设备检测
houdunwang/arr (opens new window) 数据增强
mews/captcha (opens new window) 图形验证码
mews/purifier (opens new window) html安全处理
nwidart/laravel-modules (opens new window) 项目模块化处理
socialiteproviders/wechat-web (opens new window) 微信客户端H5登录
socialiteproviders/weixin-web 微信PC扫码登录
spatie/image (opens new window) 图片压缩处理
spatie/laravel-activitylog (opens new window) 网站动态
spatie/laravel-permission (opens new window) 基于角色的权限控制
yansongda/pay (opens new window) 多平台支付处理
barryvdh/laravel-debugbar (opens new window) 调试面板
barryvdh/laravel-ide-helper (opens new window) 生成自动提示文件

# 图片处理

使用 spatie/image (opens new window) 扩展包可以进行图片压缩、裁切等处理。

安装扩展包

composer require spatie/image

等比例裁切图片

下面是等比例以原图片中心裁切图片,并将裁切后的图片保存为 public/images/test.jpeg

Image::load('images/hd.jpeg')
->crop(Manipulations::CROP_CENTER, 500, 100)
->save(public_path('images/test.jpeg'));

# 多语言

默认表单提示是英文的,我们可以安装语言包 (opens new window)构建多语言环境。

composer require laravel-lang/lang:~8.0
  • 扩展包含大多数语言,语言包位于vendor/larvel-lang/lang/src 目录中
  • 服务器需要安装 Php Intl 扩展

使用

  1. 根据需要复制语言包到 resources/lang 目录中。

  2. 修改 config/app.php 配置文件,设置语言包(即语言包的目录名)

    'locale' => 'zh_CN',
    

# 验证码

使用 mewebstudio/captcha 可以方便的生成网站图形验证码。

Preview

请参考官网文档进行安装,下面介绍如果生成支持前后台分离的验证码。

首先创建控制器CaptchaController内容如下

class CaptchaController extends Controller
{
    public function make()
    {
        return Captcha::create('default', true);
    }
}

然后在 api.php 中配置路由

Route::get('captcha', [CaptchaController::class, 'make']);

在 postman 中测试接口,可以得到以下数据

{
    "sensitive": false,
    "key": "$2y$10$819PNm1n6567hQRLoKpadOS6n.8u0F5YmnR6Nrw57KvmRL4z8gPDe",
    "img": "data:image/png;base64..."
}

前台需要把key与用户输入的验证码数据提交到后台,然后使用以下表单验证规则进行验证

$rules = ['captcha' => 'required|captcha_api:'. request('key') . ',math'];

# 设备判断

判断移动、平板设备等场景还是很常见的。使用browser-detect (opens new window)可以很容易的进行设备判断。

安装扩展

composer require hisorange/browser-detect

常用功能

下面介绍常用的功能,更多功能的使用请查看官方文档 (opens new window)

判断浏览器

use Browser;

// 判断设备类型
Browser::isMobile();
Browser::isTablet();
Browser::isDesktop();

// 浏览器检测
if (Browser::isFirefox() || Browser::isOpera()) {
    $response .= '<script src="firefox-fix.js"></script>';
}

// 操作系统检测
if (Browser::isAndroid()) {
    $response .= '<a>Install our Android App!</a>';
} elseif (Browser::isMac() && Browser::isMobile()) {
    $response .= '<a>Install our iOS App!</a>';
}

blade模板

@mobile
    <p>这是移动模板!</p>
    @include('your-mobile-template')
@endmobile

@tablet
    <p>这是平板模板!</p>
    <link rel="stylesheet" href="tablet.css" title="Reduce the page size, load what the user need">
@endtablet

@desktop
    <p>这是桌面模板!</p>
@enddesktop

# dbal

dbal 是非常方便的数据库管理驱动

文档

Github: https://github.com/doctrine/dbal

官网:https://www.doctrine-project.org/projects/dbal.html

使用

下面是在laravel框架中使用的示例:

$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
	'dbname'   => config('database.connections.mysql.database'),
	'user'     => config('database.connections.mysql.username'),
	'password' => config('database.connections.mysql.password'),
	'host'     => config('database.connections.mysql.host'),
	'driver'   => 'pdo_mysql',
	'charset'  => config('database.connections.mysql.charset')
);
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
$sm = $conn->getSchemaManager();

#获取configs表字段信息
$lists = $sm->listTableColumns('configs');

#获取列表注释
dd($lists['title']->getComment());

具体使用请查看官方文档,功能非常多且方便

# Active状态

houdunren.com (opens new window) @ 向军大叔

xj-small

在我们构建页面的过程中,经常会根据 url 的参数设置页面元素的 active 属性,将其渲染为「选中」状态。使用letrunghieu/active库可以很容易实现。

# 安装扩展

使用composer安装扩展包

composer require hieu-le/active

# 基本使用

下面介绍扩展包的常用功能,更多细节使用请查看文档 (opens new window)

下面是语法介绍

function active_class($condition, $activeClass = 'active', $inactiveClass = '')

此扩展包提供了一批函数让我们方便的进行判断

函数 说明
if_uri() 判断当前的 url 是否满足指定的 url
if_uri_pattern() 判断当前的 url 是否含有指定的字符
if_query() 判断指定的 GET 变量是否符合设置的值
if_route() 判断当前对应的路由是否是指定的路由
if_route_pattern() 判断当前的路由是否包含指定的字符
if_route_param() 判断当前的 url 有无指定的路由参数

以下是通过示例说明使用

<a class="{{ active_class(if_route('users.index')) }}" href="">会员</a>

<a class="{{ active_class(if_route('cateogry.show') && if_route_param('category', 1)) }}" href="">实战</a>

<a class="{{ active_class(if_route('cateogry.show') && if_route_param('category', 2)) }}" href="">阶段</a>

# webpack-bundle-analyzer

webpack-bundle-analyzer (opens new window) 可以在执行编译时清楚的看到每个包压缩后大小。

安装配置

使用npm 或 cnpm 等进行安装

npm install --save-dev webpack-bundle-analyzer

在项目的 webpack.mix.js 中进行配置

const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
    .BundleAnalyzerPlugin;

mix.webpackConfig({
    plugins: [new BundleAnalyzerPlugin()]
})
    .js("resources/js/app.js", "public/js")
    .sass("resources/sass/app.scss", "public/css")
    .extract(["vue", "axios", "jquery", "lodash", "bootstrap"])
    .version();

运行

在命令行执行 npm run production 生产编译,将自动打开网页显示如下界面

image-20200628211429694

# laravel-ide-helper

laravel-ide-helper (opens new window) 用于生成帮助器文件,使 IDE 能够提供准确的自动提示。生成是根据项目中的文件完成的,因此它们始终是最新的。

安装

使用以下命令安装扩展名:

composer require --dev barryvdh/laravel-ide-helper

请将服务提供商添加到 config/app.php文件中的providers数组中:

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

在 Laravel 中,可以在app/Providers/AppServiceProvider.php文件中的register() 方法内定义,而不用像上面一样添加服务提供商:

public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
    // ...
}

这将允许应用程序在非生产环境中加载 Laravel IDE 帮助程序。

使用

自动生成PHPDoc文档信息,用于自动提示

php artisan ide-helper:generate

配置composer.json文件用于在每次更新依赖项时自动运行生成程序

"scripts": {
    "post-update-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postUpdate",
        "@php artisan ide-helper:generate",
        "@php artisan ide-helper:meta"
    ]
},