杂项
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
引入 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