杂项

session

一次性session(验证提示)
$request->session()->flash('status','ok');

从session中获取数据...    
$value = session('key');    

指定默认值...    
$value = session('key', 'default');   

存储数据到session...    
session(['key' => 'value']);

视图获取 session
{{ Session::get('user_name') }}
引入 Cookie
use Illuminate\Support\Facades\Cookie;

写入 cookie
$cookie = Cookie::make($key,$value,$minutest); //创建一个cookie实例

//加入到队列
Cookie::queue($cookie );

获取 cookie
Cookie::get($key)

删除cookie
$user = Cookie::forget('username');
Cookie::queue($user);

判断cookie 是否存在
dd(Cookie::has('username'));


默认情况下,Laravel 生成的所有 Cookie 都是经过加密和签名,因此不能被客户端修改或读取。 
如果你想要应用程序生成的部分 Cookie 不被加密,
那么可以使用在 app/Http/Middleware 目录中 
App\Http\Middleware\EncryptCookies 中间件的 $except 属性:

protected $except = [
    'cookie_name',
];

分页(自定义分页样式)

操作步骤如下:
(1)  对应public/css/paging.css 文件建立分页样式.
(2)  控制器查出分页数据使用 paginate函数进行分页处理.(禁止使用group by处理查询).
(3) 对应视图引入分页样式.
paging.css 样式文件代码(复制即可用,实际操作过)如下
#pull_right{
    text-align:center;
}
.pull-right {
    /*float: left!important;*/
}
.pagination {
    display: inline-block;
    padding-left: 0;
    margin: 20px 0;
    border-radius: 4px;
}
.pagination > li {
    display: inline;
}
.pagination > li > a,
.pagination > li > span {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #428bca;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
    margin-left: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
    color: #2a6496;
    background-color: #eee;
    border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
    z-index: 2;
    color: #fff;
    cursor: default;
    background-color: #428bca;
    border-color: #428bca;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
    color: #777;
    cursor: not-allowed;
    background-color: #fff;
    border-color: #ddd;
}
.clear{
    clear: both;
}
TestCntroller.php 控制器示例写法
<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class TestController extends Controller{
    /**
     * 测试数据
     */
    public function index()
    {
        $test = DB::table('test')->paginate(5);
        return view('index', ['test' => $test]);
    }
}
list.blade.php 视图文件代码示例写法
<!--用于引用css-->
<link  rel="stylesheet" type="text/css" href="{ {asset('css/paging.css')} }"/>

<div class="container">
    <!--查数据-->
    @foreach ($test as $value)
        { { $value->id } }
    @endforeach
</div>

<div id="pull_right">
    <!--分页写法-->
    <div class="pull-right">
        { { $test->render() } }
    </div>
</div>

mews/captcha 图片验证码解决方案

使用 composer 安装:
composer require mews/captcha

修改 config/app 文件,添加 ServiceProvider

'providers' => [
    ...
    Mews\Captcha\CaptchaServiceProvider::class,
],

aliases 数组内追加如下内容

'aliases' => [
    ...
    'Captcha' => Mews\Captcha\Facades\Captcha::class,
],

运行 php artisan vendor:publish 生成配置文件 config/captcha.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,
    ]

];

使用案例

<div class="form-group code">
    <label>验证码</label>
    <input class="tt-text" name="captcha">
    {!! captcha_img() !!}
</div>


<div class="form-group code">
    <label>验证码</label>
    <input class="tt-text" name="captcha">
    <img src="{ {captcha_src()} }">
</div>

使用自定义样式的验证码

如果想使用自定义的验证码,如上文配置文件里的 inverse 选项:

return [
    ...

    'default'   => [
        ...
    ],

    'inverse'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
        'sensitive' => true,
        'angle'     => 12,
        'sharpen'   => 10,
        'blur'      => 2,
        'invert'    => true,
        'contrast'  => -5,
    ]

];

判断用户输入的验证码是否正确

$this->validate($request, [
    'captcha' => 'required|captcha'
]);

laravel5.6 邮件队列database驱动简单demo

配置 .env (demo示例是163邮箱,开启POP3和SMTP服务,获取授权密码)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=你的163邮箱地址
MAIL_PASSWORD=你的163邮箱地址对应的授权密码(不是登录密码)
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的163邮箱地址

修改 .env 中的 QUEUE_DRIVER 值 (配置文件 config/queue.php 默认是同步'sync', demo配置'database'驱动)

QUEUE_DRIVER=database

数据库建表

//队列任务表
php artisan queue:table    
//任务执行失败表            
php artisan queue:failed-table
//执行数据库迁移        
php artisan migrate

生成任务类

php artisan make:job SendEmail

生成之后,在handle方法中处理发送队列邮件

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private  $email;

    private  $content;

    private  $subject;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct( $email, $content, $subject)
    {
        $this->email = $email;
        $this->content = $content;
        $this->subject = $subject;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = $this->email;
        $subject = $this->subject;

        Mail::send(
            'admin.emails.test',
            ['content' => $this->content],
            function ($message) use($email, $subject) {
                $message->to($email)->subject($subject);
            }
        );

        // Mail::failures() 返回的错误邮件信息,判断是否发送成功. (无错误信息,返回空数组)
        if(empty(Mail::failures())){
            dd('发送成功');
        }else{
            dd('发送失败');
        }
    }
}

对应邮件发送的控制器,任务加到队列中

<?php
namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Jobs\SendEmail;

/**
 * Description of BookedController
 */
class BookedController extends Controller {

    public function queueSend()
    {
        //邮件发送demo数据
        $data =[
            0=>[
                'email'=>'XXXXXX@qq.com',
                'content'=>'Hello World One',
                'subject'=>'测试标题一',
            ],
            1=>[
                'email'=>'XXXXXX@qq.com',
                'content'=>'Hello World Two',
                'subject'=>'测试标题二',
            ]
        ];

        foreach ($data  as $item){
            //数据循环,插入表jobs中,队列初始化数据
            dispatch(new SendEmail($item['email'],$item['content'],$item['subject']));
        }
    }

}

执行队列里的任务

//默认只执行一次队列请求,当请求执行完成后就终止
php artisan queue:work
//监听队列请求,只要运行着,就能一直接受请求,除非手动终止
php artisan queue:listen
powered by GitbookEdit Time: 2023-04-08 10:28:32