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

 

posted @ 2020-07-03 23:10  JaydenQiu  阅读(368)  评论(0)    收藏  举报