Laravel 常用功能

zhangsen發表於2019-05-30

一、檔案系統

  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

相關文章