一、檔案系統
- Laravel的檔案系統是基於 Frank de jonge的Flysystem擴充套件包
- 提供了簡單的介面,可以操作本地端空間、Amazon S3、Rakspace Cloud Storage
-
可以非常簡單的切換不同儲存方式,但仍使用相同API操作
-
配置檔案
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');
}
二、郵件傳送
- Laravel的郵件功能基於熱門的SwiftMailer函式庫之上,提供了一個簡潔的API
- Laravel為SMTP、Mailgun、Mandril、Amazon SES、PHP的mail函式以及sendmail提供驅動從而允許你快速通過本地或雲服務傳送郵件
傳送郵件
配置 config/mail.php
傳送
- Mail::raw()
- 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');
});
三、快取使用
- Laravel為各種不同的快取系統提供一致的api
- Laravel支援各種常見的後端快取系統,如file、memcached和redis
主要方法
- put()
- add()
- forever()
- has()
- get()
- pull()
- 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);
}
四、錯誤日誌
- Debug模式
- HTTP模式
- 日誌
Debug模式
配置:config/app.php
進行本地開發時,應該配置APP_DEBUG環境變數為true,在上線環境,這個值應該永遠為false
五、HTTP異常
- 有些異常描述來自伺服器的HTTP錯誤碼
- 例如,這可能是一個"頁面未找到"錯誤(404),"認證失敗錯誤"(401) 亦或是程式出錯造成的500錯誤
public function error()
{
$name = 'care';
// var_dump($name);
// return view('student.error');
$student = null;
if($student == null){
abort('503');
}
}
六、日誌
- Laravel日誌工具基於強大的monolog庫,提供了single、daily、syslog和errorlog日誌模式
- debug、info、notic、warning、error、critical和alert七個錯誤級別
Log::error('這是一個error級別的日誌');
Log::info('這是一個info級別的日誌');
Log::warning('這是一個陣列',['name'=>'zhangsan','age'=>11]);
七、佇列
- Laravel佇列服務為各種不同的後臺佇列提供了統一的API
- 允許推遲耗時任務(例如傳送郵件)的執行,從而大幅提高web請求速度
處理步驟
- 遷移佇列需要的資料表
- 編寫任務類
- 推送任務到佇列
- 執行佇列監聽器
- 處理失敗任務
配置: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