一直想學Laravel卻動不了手,恰好須要研究一個workflow之類的功能,有個Laravel項目一個登錄就把我搞暈,看Laravel文檔看的也不能看進去,直接新建個Laravel仿一個,動手搞起來纔是最有效的。php
咱們首先看看 Auth::routes(),定義在 vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php: public static function routes() { static::$app->make('router')->auth(); } 這裏由 IoC 容器 解析了一個 Illuminate\Routing\Router 類的實例,再調用裏面的 auth() 方法。
IoC 容器 ?html
Laravel使用IoC(Inversion of Control,控制倒轉,這是一個設計模式,能夠先查看下百科)容器這個強有力的工具管理類依賴。依賴注入(也是一種設計模式,通常用於實現IoC)是一個不用編寫固定代碼來處理類之間依賴的方法,相反的,這些依賴是在運行時注入的,這樣容許處理依賴時具備更大的靈活性。
看到類已經引入了文件,類中還use。和這個題主有一樣的困惑:
Laravel 中的 use 操做符爲何要在類裏面寫?,原來是引入Trait,通俗一點的意義是:能把重複的方法拆分到一個文件,經過 use 引入以達到代碼複用的目的。本身寫PHP的時候還真沒有這麼用到過。laravel
找回密碼時候出錯,不存在password_resets
表,
和之前同樣,migrate只能執行一個users表,須要移動到新文件夾,從新把--path=路徑文件夾加上就能夠建立數據表。segmentfault
以前只能建立一個users表沒有急需建表的緣由是unique報錯,緣由是添加unique索引時
$table->string('email')->unique();
報錯致使沒建立全部的表,解決:Laravel 5.4: 特殊字段太長報錯設計模式
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key len gth is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
而後報錯Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required"
,郵件配置問題。安全
改好以後,再次發送,We have e-mailed your password reset link!
發送成功,可是沒有收到郵件,查原郵件是 系統退信 550 Mail content denied 出錯緣由:該郵件內容涉嫌大量羣發,而且被多數用戶投訴爲垃圾郵件。
服務器
參考laravel 用戶發送郵件重置密碼。棄用這條,不過文章裏的分析過程能夠很詳細能夠學習學習執行流程。app
但是這裏的SendCloudTemplate
是什麼啊,原來用的是SendCloud
再參考這篇如何在 Laravel 中使用 SMTP 發送郵件(適用於 16三、QQ、Gmail 等),不過我沒改config/mail.php
,改的配置.env
。仍是在User.php中重寫sendPasswordResetNotification($token)
方法框架
/* *reset password email */ public function sendPasswordResetNotification($token){ $url=url(config('app.url').route('password.reset', $token, false)); $data = ['email'=>$this->email, 'name'=>$this->name,'url'=>$url]; Mail::send('resete', $data, function($message) use($data){ $message->to($data['email'], $data['name'])->subject('workFlow找回密碼!'); }); }
'resete'
爲模板: resete.blade.php
工具
<!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> </head> <body> <a href="{{$url}}" target="_blank">{{$name}},重置密碼</a> </body> </html>
再次發送,成功。收到郵件帶找回密碼連接,帶Token
點擊以後,新連接輸入郵箱和新密碼就更改爲功。下圖是token無效的提示。太方便了 :) ==Token存儲在password_resets表裏,使用過以後則刪除。==
P.S. 中途又出現幾回550退信,收件服務器設置添加白名單解決,再以後被系統攔截,只能手動取回。
過年以前寫的一篇筆記,原本打算開始移植流程管理的,就初體驗到這吧。
Laravel 2 這樣才能瞭解框架
$router->model('task', 'App\Task'); [5.2] 修改成 Route::model('task', 'App\Task');