Laravel 常用包汇总

文章目录

    • 解决跨域——laravel-cors
    • 区分移动端和PC端——jenssegers/agent
    • 快速开发——l5-repository
    • 图片上传到OSS—— johnlui/AliyunOSS
    • 发送模板短信——laravel-sms
    • 查看错误日志——laravel-log-viewer
    • 生成二维码图片——simple-qrcode
    • 权限验证——zizaco/entrust
    • 微信开发——zoujingli/wechat-developer

解决跨域——laravel-cors

  • 场景
laravel作为后端API使用的时候,前端ajax请求的时候 遇到跨域的问题
  • 安装

barryvdh/laravel-cors使用方法很简单

安装: composer require barryvdh/laravel-cors

  • 使用:

app/Http/Kernel.phpprotected $middleware数组里添加 \Barryvdh\Cors\HandleCors::class

查看效果:这时候ajax 访问就可以没有跨域的问题了

区分移动端和PC端——jenssegers/agent

  • 场景
Laravel User Agent 轻松识别客户端信息 —— jenssegers/agent,客户端会通过这个请求向访问网站提供浏览器类型、操作系统及版本,浏览器渲染引擎,浏览器语言等标识的信息
  • github地址

https://github.com/jenssegers/agent

  • 安装

安装: composer require jenssegers/agent

  • 使用
$this->agent = new Agent();
//判断是否手机
$this->agent->isMobile()
//判断是否平板
$this->agent->isTablet()
//其余请自行查看手册
……

快速开发——l5-repository

  • 场景
需要快速开发,一键生成所有增删改查,集成了控制器,验证器,模型,仓库,呈现器和转换器等
  • github地址

https://github.com/andersao/l5-repository

  • 安装

composer require prettus/l5-repository

  • 使用
  1. 在您的 config/app.php下的provider数组里添加
    Prettus\Repository\Providers\RepositoryServiceProvider::class
    如:

providers => [
    ...
    Prettus\Repository\Providers\RepositoryServiceProvider::class,

],
  1. 发布配置(将在config下生成repository.php文件)
php artisan vendor:publish
  1. 使用以下命令,将创建控制器controller、验证器Validator、模型Model、仓库Repository、呈现器Presenter和转换器Transform的类文件。

php artisan make:entity name

其余的使用请自行查看手册

图片上传到OSS—— johnlui/AliyunOSS

  • 场景
软件需要上传大量的文件或图片,或者是为了方便处理图片,都可以使用阿里云OSS方便我们开发。
  • github地址

https://github.com/johnlui/AliyunOSS

  • 安装

composer require johnlui/aliyun-oss:~2.0

  • 使用
  1. 构建service文件

新建 app/services/OSS.php内容可参考:OSS.php



namespace App\Services;
 
use JohnLui\AliyunOSS\AliyunOSS;
 
use Config;
 
class OSS {
     
 
    private $ossClient;
 
    public function __construct($isInternal = false)
    {
     
        $serverAddress = $isInternal ? Config::get('oss.ossServerInternal') : Config::get('oss.ossServer');
        $this->ossClient = AliyunOSS::boot(
            $serverAddress,
            Config::get('oss.AccessKeyId'),
            Config::get('oss.AccessKeySecret')
        );
    }
 
    // 默认上传文件使用内网,免流量费
    public static function upload($ossKey, $filePath, $isInternal = true)
    {
     
        $oss = new OSS($isInternal);
        $oss->ossClient->setBucket('你的Bucket名字');
        $oss->ossClient->uploadFile($ossKey, $filePath);
    }
    /**
     * 直接把变量内容上传到oss
     * @param $osskey
     * @param $content
     */
    public static function uploadContent($osskey,$content)
    {
     
        $oss = new OSS(true); // 上传文件使用内网,免流量费
        $oss->ossClient->setBucket('你的Bucket名字');
        $oss->ossClient->uploadContent($osskey,$content);
    }
 
    /**
     * 删除存储在oss中的文件
     *
     * @param string $ossKey 存储的key(文件路径和文件名)
     * @return
     */
    public static function deleteObject($ossKey)
    {
     
        $oss = new OSS(true); // 上传文件使用内网,免流量费
 
        return $oss->ossClient->deleteObject('你的Bucket名字', $ossKey);
    }
 
    /**
     * 复制存储在阿里云OSS中的Object
     *
     * @param string $sourceBuckt 复制的源Bucket
     * @param string $sourceKey - 复制的的源Object的Key
     * @param string $destBucket - 复制的目的Bucket
     * @param string $destKey - 复制的目的Object的Key
     * @return Models\CopyObjectResult
     */
    public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
    {
     
        $oss = new OSS(true); // 上传文件使用内网,免流量费
 
        return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
    }
 
    /**
     * 移动存储在阿里云OSS中的Object
     *
     * @param string $sourceBuckt 复制的源Bucket
     * @param string $sourceKey - 复制的的源Object的Key
     * @param string $destBucket - 复制的目的Bucket
     * @param string $destKey - 复制的目的Object的Key
     * @return Models\CopyObjectResult
     */
    public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
    {
     
        $oss = new OSS(true); // 上传文件使用内网,免流量费
 
        return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
    }
 
    public static function getUrl($ossKey)
    {
     
        $oss = new OSS();
        $oss->ossClient->setBucket('你的Bucket名字');
        return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));
    }
 
    public static function createBucket($bucketName)
    {
     
        $oss = new OSS();
        return $oss->ossClient->createBucket($bucketName);
    }
 
    public static function getAllObjectKey($bucketName)
    {
     
        $oss = new OSS();
        return $oss->ossClient->getAllObjectKey($bucketName);
    }
 
    /**
     * 获取指定Object的元信息
     *
     * @param  string $bucketName 源Bucket名称
     * @param  string $key 存储的key(文件路径和文件名)
     * @return object 元信息
     */
    public static function getObjectMeta($bucketName, $osskey)
    {
     
        $oss = new OSS();
        return $oss->ossClient->getObjectMeta($bucketName, $osskey);
    }
}
  1. 增加相关配置

app/config/oss.php中增加以下配置


return [
    'useInternal' => false,//是否使用OSS内网传输来省流量
    'ossServer' => '服务器外网地址', //青岛为 http://oss-cn-qingdao.aliyuncs.com
    'ossServerInternal' => '服务器内网地址', //青岛为 http://oss-cn-qingdao-internal.aliyuncs.com
    'AccessKeyId' => '阿里云给的AccessKeyId',
    'AccessKeySecret' => '阿里云给的AccessKeySecret',
];
  1. 具体实现
use App\Services\OSS;
 
OSS::upload('文件名', '本地路径'); // 上传一个文件
 
echo OSS::getUrl('某个文件的名称'); // 打印出某个文件的外网链接
 
OSS::createBucket('一个字符串'); // 新增一个 Bucket。注意,Bucket 名称具有全局唯一性,也就是说跟其他人的 Bucket 名称也不能相同。
 
OSS::getAllObjectKey('某个 Bucket 名称'); // 获取该 Bucket 中所有文件的文件名,返回 Array。
  • 常见问题

问题1:运行时出现Undefined index: host

原因:配置文件中 ossServer 的值未加http://

问题2:运行时出现The specified bucket is not valid.

原因:内外地址填写时加了BucketName例如http://BucketName.oss-cn-beijing.aliyuncs.com拼接起来就变成了http://bucketName.bucketName.oss-cn...com

解决方案:在配置文件里面ALIOSS_SERVER=http://oss-cn-beijing.aliyuncs.com 这个外网地址前面不要加上 Bucket名字

  • 彩蛋

如果你前端需要处理图片(如:缩放,裁剪,旋转,加水印等),用OSS是非常方便的。详情查看Oss文档

发送模板短信——laravel-sms

  • 场景

发送短信验证码,短信通知等

  • github地址

https://github.com/toplan/laravel-sms

  • 安装

composer require toplan/laravel-sms:~2.6

  • 使用

详细使用可以参照之前我写过的一篇博客Laravel下的短信验证码注册

查看错误日志——laravel-log-viewer

  • 场景

需要可视化的查看服务器上的错误日志,以便于调试Bug

  • github地址

https://github.com/rap2hpoutre/laravel-log-viewer

  • 安装

composer require rap2hpoutre/laravel-log-viewer

  • 使用
  1. config/app.php中的provider里添加
Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class,
  1. 路由里定义
Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');

生成二维码图片——simple-qrcode

  • 场景

需要根据链接地址生成二维码图片

  • github地址

https://github.com/SimpleSoftwareIO/simple-qrcode

  • 安装

composer require simplesoftwareio/simple-qrcode 1.3.*

  • 使用
  1. config/app.php中的provider里注册服务提供者
SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class
  1. config/app.php中的aliases里 添加 QrCode 门面
'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class
  1. 基本用法

a. 使用QrCode::generate('Hello,World!');可以生成一个Hello,World!的二维码

b.使用QrCode::format('png')->size(150)->merge('/public/images/logo.png')->errorCorrection('H')->generate('Hello,World!','../public/images/'.$image_name);

讲解:format()为要生成的图片格式,size()为生成的图片大小,merge()为添加二维码中间logo图片,errorCorrection()定义容错级别,为了让二维码保持高可识别度一般定义为errorCorrection(‘H’),generate()为生成二维码,第一个参数为需要生成二维码的字符串,第二个参数为保存的图片地址。

需要注意的是所有的方法都支持连贯操作,但是generate 方法必须在最后,format 必须在第一个

具体的操作可以查看博客

权限验证——zizaco/entrust

  • 场景

在做后台管理时我们经常会用到权限,限制用户的操作范围

  • github地址

https://github.com/Zizaco/entrust

  • 安装

composer require zizaco/entrust 5.2.x-dev

  • 使用
  1. config/app.php中的provider里注册服务提供者

Zizaco\Entrust\EntrustServiceProvider::class,

  1. config/app.php中的aliases里 添加 Entrust 门面

‘Entrust’ => Zizaco\Entrust\EntrustFacade::class,

  1. 发布配置文件

php artisan vendor:publish

  1. 打开config/auth.php配置,将你的用户表进行关联
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => Namespace\Of\Your\User\Model\User::class,
        'table' => 'users',
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
        'table' => 'admins'
    ],
],
  1. 基本使用

(1) 迁移数据库,运行php artisan entrust:migrationphp artisan migrate自动生成以下表

roles — 角色表
permissions — 权限表
role_user — 角色和用户之间的关系
permission_role— 角色和权限之间的关系

(2) 创建相应的模型

a.创建Role模型


php namespace App;
use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{
     
}

b.创建Permission模型

 
namespace App;
use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
     
}

c.创建Admin模型


use Zizaco\Entrust\Traits\EntrustUserTrait;
class Admin extends Eloquent
{
     
    use EntrustUserTrait; // T添加到你的模型

    ...
}

(3) 创建中间件

app/Http/Kernel.php中添加'permission' => \App\Http\Middleware\Permission::class,

 protected $routeMiddleware = [
        ……
        'permission' => \App\Http\Middleware\Permission::class,
    ];

app/Http/Middeware下创建permisson.php



namespace App\Http\Middleware;

use App\Models\Admin;
use Closure;
use Illuminate\Http\Request;

class Permission
{
     
    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
     
        //获取当前登录的管理员
        $user = auth()->user();
        //获取管理员访问的路由
        $name = $request->route()->action['as'];
        //判断该管理员是否有权访问该路由
        if (!$user->can($name)) {
     
            abort(403, 'Forbidden');
        }
        return $next($request);

    }
}

(4)定义路由

将你需要做权限限制的路由绑定中间件permisson,比如查看文章需要权限验证:

Route::group(['prefix' => '' , 'middleware'=> 'permission'], function () {
     

    Route::resources([
        'article' => 'ArticleController',
        'articleCat' => 'ArticleCatsController',
    ]);

});

微信开发——zoujingli/wechat-developer

  1. 场景

当你需要对接第三方微信时,可能会遇到微信支付,发送模板消息,自动回复等场景

  1. github地址

https://github.com/zoujingli/WeChatDeveloper

  1. 安装

composer require zoujingli/wechat-developer

  1. 使用

请查看官方手册

你可能感兴趣的:(php,laravel)