14、Laravel框架常用功能
文件上传
配置文件 config -> filesystems.php,可以使用原有的磁盘,也可以新建磁盘
一、新建磁盘
'upload' => [ 'driver' => 'local', 'root' => storage_path('app/public'), //上传目录为 storage/app/public/
//'root' => public_path('upload'), //上传目录为 public/upload/ ],
二、配置路由,配置控制器
1、控制器引入Storage
use Illuminate\Support\Facades\Storage;
2、控制器引入Request
use Illuminate\Http\Request;
3、新建方法
public function upload(Request $request){ if($request->isMethod('POST')){ $file = $request->file('source'); //文件是否上传成功 if($file->isValid()){ //原文件名 $originalName = $file->getClientOriginalName(); //扩展名 $ext = $file->getClientOriginalExtension(); //文件类型 $type = $file->getClientMimeType(); //临时绝对路径 $realPath = $file->getRealPath(); //上传后的文件名 $filename = date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext; //执行上传 $bool = Storage::disk('upload')->put($filename,file_get_contents($realPath)); //第一个参数文件名,第二个参数为源文件临时路径 var_dump($bool); //上传成功返回true } exit; } return view('Xxx.upload'); }
4、新建视图
<form action="" method="POST" enctype="multipart/form-data"> @csrf <input type="file" id="file" name="source"/> <button type="submit">上传</button> </form>
邮件发送
配置文件 config / mail.php,
default里面配置默认驱动,smtp(16行左右)
from里面配置发件人邮箱、名称(84行左右)
mailers -> smtp -> host、port、encryption 配置发送邮件的主机地址、端口、协议(具体信息在.env里面填写)
缓存的使用
一、控制器引入
use Illuminate\Support\Facades\Cache;
二、各种方法使用
public function cache1(){ //put添加键值对,设置时长,单位秒 Cache::put('key1','val1',60); //add判断是否存在该键,存在就不添加并返回false,不存在就添加并返回true // $bool = Cache::add('key2','val2',20); // var_dump($bool); //forever永久保存该键值对 // Cache::forever('key3','val3'); //has判断该键是否存在 // if(Cache::has('key3')){ // echo 'key3存在'; // } } public function cache2(){ //get获取缓存的值 // $key1 = Cache::get('key1'); // var_dump($key1); //pull取出键值对后立即删除 // $val = Cache::pull('key3'); // var_dump($val); //forget删除某个键,返回布尔值 $bool = Cache::forget('key1'); var_dump($bool); }
错误与日志
Debug模式
一、配置文件:config / app.php
二、默认在.env文件里面填入true/false(.env第4行)
三、代码上线后debug模式要设置为false
HTTP异常
一、判断到http异常就抛出状态码
public function error(){ $stt = null; if($stt==null){ abort('500'); //除了500还有其他的,如404等等 } }
日志
配置文件在 config -> logging.php ,默认选择stack日志驱动。更改需要在.env文件的第七行进行。
Laravel日志支持 single、daily、slack、syslog、errorlog、monolog、custom、stack 等日志驱动
官方文档:https://learnku.com/docs/laravel/7.x/logging/7469
single驱动
一、生成的日志文件在 storage / logs 下的 laravel.log
二、控制器引入
use Illuminate\Support\Facades\Log;
三、控制器发生错误时,将错误写进日志
public function error(){ $stt = null; if($stt==null){ Log::info('这是info级别的日志'); abort('500'); } } //除了info级别的还有,debug、notice、warning、error、critical、alert 级别的日志。
队列
作用:允许推迟耗时任务(如发送邮件)的执行,从而大幅度提升web请求速度。
配置文件:config / queue.php 。默认为同步驱动sync,在.env里面更改(18行左右)。
支持的驱动有:sync、database、beanstalkd、sqs、redis、null
Database驱动
一、迁移队列需要的数据表(生成的job表和fail_job表,在database/migrations里面)
php artisan queue:table
执行迁移
php artisan migrate
二、编写任务类(生成的文件在Jobs / SeedMail.php)
php artisan make:job SeedMail
编写SeedMail.php
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Mail;
use Illuminate\Support\Facades\Log; class SeedMail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email; public function __construct($email) { //接收参数 $this -> email = $email; } public function handle() { //队列任务 //Mail::raw('队列测h',function($message){ //$message->to($this->email); //});
Log::info('模拟发送邮件->' . $this->email); } }
三、推送任务到队列
控制器引入
use DispatchesJobs; //使用DispatchesJobs use App\Jobs\SeedMail; //使用队列
编写方法
public function queue(){ dispatch(new SeedMail('83962159@qq.com')); }
运行方法,此时jobs表就有数据了(报错?)
四、运行队列监听器
php artisan queue:listen
这时便执行队列中的任务(如邮件发送)
五、处理失败任务
查看失败记录
php artisan queue:failed
重新执行某条任务(id为1的那条)
php artisan queue:retry 1
重新执行失败记录里的所有任务
php artisan queue:retry all
删除某条失败记录的任务(id为2的)
php artisan queue:forget 2
删除某条失败记录的所有任务
php artisan queue:flush

浙公网安备 33010602011771号