您正在查看: 标签 laravel 下的文章

Laravel 图床与颜值检测结晶

前要

本人曾经发过这样两个帖子

检测颜值包,基于微软小冰 以及 用 Laravel 写了一个图床网站

项目

HanSon/faceHanSon/img

如今终于两个项目结合在一起了 体验传送门

效果图

穿衣风格效果图(会在新窗口弹出,记得在浏览器允许):

file

file

file

file

file

小结

因为微软小冰曾经做过一次升级,导致 SDK 暂时不可用,今天也花了点时间修复并且结合在图床中,图床代码大家看看就好,没有过多的优化。

图床有很多不足,只是一个 demo 级别的项目,例如图片大小都没有控制,仅仅娱乐,大家不要玩坏了。

前要

本人曾经发过这样两个帖子

检测颜值包,基于微软小冰 以及 用 Laravel 写了一个图床网站

项目

HanSon/faceHanSon/img

如今终于两个项目结合在一起了 体验传送门

效果图

穿衣风格效果图(会在新窗口弹出,记得在浏览器允许):

file

file

file

file

file

小结

因为微软小冰曾经做过一次升级,导致 SDK 暂时不可用,今天也花了点时间修复并且结合在图床中,图床代码大家看看就好,没有过多的优化。

图床有很多不足,只是一个 demo 级别的项目,例如图片大小都没有控制,仅仅娱乐,大家不要玩坏了。

用 Laravel 写了一个图床网站

file

项目地址: https://github.com/HanSon/img

体验地址: http://img.hanc.cc/

抽了一天时间写了这个基于 https://sm.ms/ 的图床小站,尽管说是用 laravel ,但是后端几乎没有什么工作量,大概也就20行的后端代码,几乎都是前端的工作为主。

前端主要了解了 drag & drop 以及 clipboard 这个库。

纯粹闲的蛋疼

file

file

项目地址: https://github.com/HanSon/img

体验地址: http://img.hanc.cc/

抽了一天时间写了这个基于 https://sm.ms/ 的图床小站,尽管说是用 laravel ,但是后端几乎没有什么工作量,大概也就20行的后端代码,几乎都是前端的工作为主。

前端主要了解了 drag & drop 以及 clipboard 这个库。

纯粹闲的蛋疼

file

给你的网站加上公众号消息模板异常提醒吧

Laravel 拥有非常好的异常处理机制,所有的异常都会经过 App\Exceptions\Handlerreport 方法进行处理( 查看详情 )。

然而我所见过大部分公司或者组织,都没有很好的查看日志习惯,以至于有可能有一堆错误日志或者影响用户体验的地方却没有发现。

你可以选择邮件通知你的网站异常

public function report(Exception $exception)
{
    // 你也可以选择短信通知,土豪随意
    Sms::send($phone, [$exception]);
    // 比较传统的通知方式
    Mail::to($request->user())->send(new ExceptionNotify($exception));
    return parent::report($exception);
}

- 阅读剩余部分 -

Speedy - 简洁灵活的 Laravel 管理后台

Speedy是基于 vue2 + bootstrap 的 laravel 管理后台,能够快速开发好一个权限后台,而且能够非常方便的生成一级或者二级菜单。

项目地址: https://github.com/HanSon/speedy

欢迎前来 star 以及提 issue !

file

安装

composer require hanson/speedy

- 阅读剩余部分 -

laravel5.3的bug 无法在一个项目中使用多个同一数据库驱动

最近做项目掉进一个深坑,以至于一个小问题烦恼我两天以至于怀疑人生。

新项目需要连接两个mysql数据库,然而却出现无论如何也查询不了第二个数据库的情况。

经历了多次断点调试,google无止境搜索,询问印度阿三无果的情况下,也只能查看源码解决问题了。

最终发现在laravel的ConnectionFactory类的createConnection方法中有这么一段

protected function createConnection($driver, $connection, $database, $prefix = '', array $config = [])
{
    if ($this->container->bound($key = "db.connection.{$driver}")) {
        return $this->container->make($key, [$connection, $database, $prefix, $config]);
    }

    switch ($driver) {
        case 'mysql':
            return new MySqlConnection($connection, $database, $prefix, $config);
        case 'pgsql':
            return new PostgresConnection($connection, $database, $prefix, $config);
        case 'sqlite':
            return new SQLiteConnection($connection, $database, $prefix, $config);
        case 'sqlsrv':
            return new SqlServerConnection($connection, $database, $prefix, $config);
    }

    throw new InvalidArgumentException("Unsupported driver [$driver]");
}

$this->container->bound($key = "db.connection.{$driver}") 通过driver去跟容器做了绑定,也就是当你有第二个一样driver的数据库时,调用 $this->container->make()方法也会同样返回第一个绑定的 connection,这样无论如何也只能查询第一个了。

修改后

if ($this->container->bound($key = "db.connection.{$driver}.{$config['name']}")) {
    return $this->container->make($key, [$connection, $database, $prefix, $config]);
}

通过传入connection自定义的名称,能够避免重复

只可惜我提PR时对方表示5.3不作bug修复,很诧异。。。

PR在此
issue在此

最近做项目掉进一个深坑,以至于一个小问题烦恼我两天以至于怀疑人生。

新项目需要连接两个mysql数据库,然而却出现无论如何也查询不了第二个数据库的情况。

经历了多次断点调试,google无止境搜索,询问印度阿三无果的情况下,也只能查看源码解决问题了。

最终发现在laravel的ConnectionFactory类的createConnection方法中有这么一段

protected function createConnection($driver, $connection, $database, $prefix = '', array $config = [])
{
    if ($this->container->bound($key = "db.connection.{$driver}")) {
        return $this->container->make($key, [$connection, $database, $prefix, $config]);
    }

    switch ($driver) {
        case 'mysql':
            return new MySqlConnection($connection, $database, $prefix, $config);
        case 'pgsql':
            return new PostgresConnection($connection, $database, $prefix, $config);
        case 'sqlite':
            return new SQLiteConnection($connection, $database, $prefix, $config);
        case 'sqlsrv':
            return new SqlServerConnection($connection, $database, $prefix, $config);
    }

    throw new InvalidArgumentException("Unsupported driver [$driver]");
}

$this->container->bound($key = "db.connection.{$driver}") 通过driver去跟容器做了绑定,也就是当你有第二个一样driver的数据库时,调用 $this->container->make()方法也会同样返回第一个绑定的 connection,这样无论如何也只能查询第一个了。

修改后

if ($this->container->bound($key = "db.connection.{$driver}.{$config['name']}")) {
    return $this->container->make($key, [$connection, $database, $prefix, $config]);
}

通过传入connection自定义的名称,能够避免重复

只可惜我提PR时对方表示5.3不作bug修复,很诧异。。。

PR在此
issue在此

laravel 中 Facades的原理以及代码剖析

Facades

原理

In the context of a Laravel application, a facade is a class that provides access to an object from the container. The machinery that makes this work is in the Facade class. Laravel's facades, and any custom facades you create, will extend the base Illuminate\Support\Facades\Facade class.

A facade class only needs to implement a single method: getFacadeAccessor. It's the getFacadeAccessor method's job to define what to resolve from the container. The Facade base class makes use of the __callStatic() magic-method to defer calls from your facade to the resolved object.

简单来说,门面是通过一个魔术方法__callStatic()把静态方法映射到真正的方法上。

本文我们用Route来举例,

Route::get('/', function(){
    # 
}

- 阅读剩余部分 -

laravel Encryption 详解

laravel Encryption 详解

简介

Encryption是laravel自带的一个加密模块,让我们先来看看文档说明

Configuration

Before using Laravel's encrypter, you should set the key option of your config/app.php configuration file to a 32 character, random string. If this value is not properly set, all values encrypted by Laravel will be insecure.

意思就是在使用laravel的encrypter前,需要在config/app.php设置一下key(秘钥)和cipher(加密方式)。

# from config/app.php
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',

env方法指明了读取.env文件的APP_KEY,这个只能够通过 php artisan key:generate生成,也是整个应用程序的key,cipher表明了加密的方式,默认AES-256-CBC

- 阅读剩余部分 -

laravel的artisan命令

新建控制器
php artisan make:controller Admin/AdminHomeController
新建model
php artisan make:model Comment
新建migration
php artisan make:migration create_comments_table
生成密匙
php artisan key:generate
执行生成数据库操作
php artisan migrate

新建控制器
php artisan make:controller Admin/AdminHomeController
新建model
php artisan make:model Comment
新建migration
php artisan make:migration create_comments_table
生成密匙
php artisan key:generate
执行生成数据库操作
php artisan migrate