Laravel 常用功能

一、文件系统

  1. Laravel的文件系统是基于 Frank de jonge的Flysystem扩展包

  2. 提供了简单的接口,可以操作本地端空间、Amazon S3、Rakspace Cloud Storage

  3. 可以非常简单的切换不同保存方式,但仍使用相同API操作

  4. 配置文件

    config/filesystems.php

    在当前配置文件中新增

           'uploads' => [
               'driver' => 'local',
               'root' => storage_path('app/uploads'),
               'url' => env('APP_URL').'/storage',
           ],

    StudentController.php中创建

​ 在web中新增路由Route::any('upload','StudentController@upload');

​ 打印结果

    public function upload(Request $request)
    {
        if($request->isMethod('POST')){
            var_dump($_FILES);
            exit();
        }
        return view('student.upload');
    }

/home/vagrant/code/Laravel/app/Http/Controllers/StudentController.php:489:
array (size=1)
  'source' => 
    array (size=5)
      'name' => string 'QQ20190331-000842@2x.png' (length=24)
      'type' => string 'image/png' (length=9)
      'tmp_name' => string '/tmp/phpZ3uTtZ' (length=14)
      'error' => int 0
      'size' => int 734965

方法:

$files = $request->file('source');
dd($files);

输出

UploadedFile {#363 ▼
  -test: false
  -originalName: "QQ20190331-000842@2x.png"
  -mimeType: "image/png"
  -error: 0
  #hashName: null
  path: "/tmp"
  filename: "phpIblkUt"
  basename: "phpIblkUt"
  pathname: "/tmp/phpIblkUt"
  extension: ""
  realPath: "/tmp/phpIblkUt"
  aTime: 2019-05-28 23:11:09
  mTime: 2019-05-28 23:11:09
  cTime: 2019-05-28 23:11:09
  inode: 1446599
  size: 734965
  perms: 0100600
  owner: 1000
  group: 1000
  type: "file"
  writable: true
  readable: true
  executable: false
  file: true
  dir: false
  link: false
}

完整上传方法

public function upload(Request $request)
{
  if($request->isMethod('POST')){
    //                var_dump($_FILES);
    //                exit();
    $file = $request->file('source');
    //                dd($files);
    //文件是否上传成功
    if($file->isValid()){
      //原文件名
      $originaName = $file->getClientOriginalName();
      //扩展名
      $ext = $file->getClientOriginalExtension();
      //MimeType
      $type = $file->getClientMimeType();
      //临时绝对路径
      $realPath = $file->getRealPath();
      $filename = date("Y-m-d H:i:s").'-'.uniqid().'.'.$ext;
      $bool = Storage::disk('uploads')->put($filename,file_get_contents($realPath));
      var_dump($bool);
    }
  }
  return view('student.upload');
}

二、邮件发送

  1. Laravel的邮件功能基于热门的SwiftMailer函数库之上,提供了一个简洁的API
  2. Laravel为SMTP、Mailgun、Mandril、Amazon SES、PHP的mail函数以及sendmail提供驱动从而允许你快速通过本地或云服务发送邮件

发送邮件

配置 config/mail.php

发送

  1. Mail::raw()
  2. Mail::send()
 public function mail()
 {
   Mail::raw('邮件内容 测试',function ($message){
     $message->from('zx554805642@163.com','Laravel学习');
     $message->subject('邮件主题 测试');
     $message->to('554808642@qq.com');
   });
 }     
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=zx554805642
MAIL_PASSWORD=15902768404
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=zx554805642@163.com
MAIL_FROM_NAME='Laravel学习发送邮件'

HTML格式邮件

Mail::send('student.mail',['name'=>'care'],function ($message){
                $message->to('554808642@qq.com');
            });

三、缓存使用

  1. Laravel为各种不同的缓存系统提供一致的api
  2. Laravel支持各种常见的后端缓存系统,如file、memcached和redis

主要方法

  1. put()
  2. add()
  3. forever()
  4. has()
  5. get()
  6. pull()
  7. forget()

使用

配置:config/cache.php

 //新增方法
 public function cache1()
    {
        //put()
        Cache::put('key1','val',10);

        //add()  key存在返回false,key不存在返回true 并缓存
       $bool =  Cache::add('key2','val',10);
       var_dump($bool);

        //forever()  永久缓存
        Cache::forever('key3','val');

        //has()
        $bool = Cache::has('key2');
        var_dump($bool);

    }

//删除方法
    public function cache2()
    {
        //get
        $val = Cache::get('key2');
        var_dump($val);

        //pull 取出一次之后再删除
        $val = Cache::pull('key1');
        var_dump($val);

        //forget()  返回bool
        $bool = Cache::forget('key1');
        var_dump($bool);
    }

四、错误日志

  1. Debug模式
  2. HTTP模式
  3. 日志

Debug模式

配置:config/app.php

进行本地开发时,应该配置APP_DEBUG环境变量为true,在上线环境,这个值应该永远为false

五、HTTP异常

  1. 有些异常描述来自服务器的HTTP错误码
  2. 例如,这可能是一个"页面未找到"错误(404),"认证失败错误"(401) 亦或是程序出错造成的500错误
    public function error()
    {
        $name = 'care';
//        var_dump($name);
//        return view('student.error');

        $student = null;
        if($student == null){
            abort('503');
        }
    }

六、日志

  1. Laravel日志工具基于强大的monolog库,提供了single、daily、syslog和errorlog日志模式
  2. debug、info、notic、warning、error、critical和alert七个错误级别
Log::error('这是一个error级别的日志');
Log::info('这是一个info级别的日志');
Log::warning('这是一个数组',['name'=>'zhangsan','age'=>11]);

七、队列

  • Laravel队列服务为各种不同的后台队列提供了统一的API
  • 允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度

处理步骤

  1. 迁移队列需要的数据表
  2. 编写任务类
  3. 推送任务到队列
  4. 运行队列监听器
  5. 处理失败任务

配置:config/queue

//生成表
php artisan queue:table
(生成2019_05_29_195612_create_jobs_table.php文件)

vagrant@homestead:~/code/Laravel$ php artisan migrate
Migrating: 2019_05_29_195612_create_jobs_table
Migrated:  2019_05_29_195612_create_jobs_table

//生成任务记录表
vagrant@homestead:~/code/Laravel$ php artisan make:job SendEmail
Job created successfully.
//生成任务失败记录表
vagrant@homestead:~/code/Laravel$ php artisan queue:failed-table
Migration created successfully!
//执行迁移文件
  vagrant@homestead:~/code/Laravel$ php artisan migrate
Migrating: 2019_05_29_200557_create_failed_jobs_table
Migrated:  2019_05_29_200557_create_failed_jobs_table
//查看失败队列
php artisan queue:failed
//重复执行某一个队列 id
php artisan queue:retry 1
//重复执行所有队列
php artisan queue:retry all
//删除队列中某个任务
php artisan queue:forget 1
//删除队列中所有任务
php artisan queue:flush
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!