Laravel 4中,可使用Route::filter,而在Laravel 5中,沒有了filter.php文件,官方建議使用中間件作。php
下面是用戶登錄的測試例子,涉及到的一些方法和使用,先參見這裏:http://www.cnblogs.com/HD/p/4569858.htmlhtml
這裏的例子是基於如上文章後所擴展的。chrome
app\models\Login.phpjson
<?php namespace App\models; use App\models\BaseModel; /** * 用戶登錄模型 * @author Robin * */ class Login extends BaseModel { /** * 用戶名 * @var String */ public $username; /** * 名稱 * @var String */ public $password; /** * 轉換用戶輸入爲對象模型 * @param Input $input */ public function convert($input) { //----------------------------------------------------- // 字段驗證 //----------------------------------------------------- $rule = array( "username" => "required|min:4|max:10", "password" => "required|between:3,16", ); //----------------------------------------------------- // 調用父類方法 //----------------------------------------------------- $this->init($input, $rule); } } ?>
app\Http\Middleware\CheckLoginMiddleware.php數組
<?php namespace App\Http\Middleware; use Closure; use Cookie; use Redirect; use Illuminate\Contracts\Routing\Middleware; /** * 檢查用戶登錄中間件 * @author Robin * */ class CheckLoginMiddleware implements Middleware { /** * 構造函數 */ public function __construct() { // TODO } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 取得用戶的Cookie $token = Cookie::get("TOKEN"); // 若是有Cookie if(isset($token)) { // 將cookie值轉爲json對象數組 $user = json_decode($token); // 往下執行 return $next($request); } else { // 若是取不到用戶的cookie,跳轉到用戶登錄頁面 return Redirect::action("LoginController@getIndex", ["path" => $request->fullUrl()]); } } } ?>
新建的中間建須要繼承Middleware接口。cookie
另外,必需引用Closure,否則會出錯的。app
新加入用戶登錄路由dom
app\Http\routes.php函數
//------------------------------------------------------------------ // Controller Group // 加入前綴my2,意思是在裏頭的全部路由地址都以my2開頭 // 例如:http://localhost/my/add //------------------------------------------------------------------ Route::group(["prefix" => "my2", "middleware" => 'login'], function() { Route::controller("/", "my\MyTest2Controller"); }); /** * 控制器與路徑設置 */ Route::controllers([ // 用戶登錄 'login' => 'LoginController', ]);
看到這裏,在Route::group中加入了middleware。post
新建一個登錄控制器
app\Http\Controllers\LoginController.php
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Redirect; use Route; use View; use Input; use Request; use URL; use Session; use Response; use Cookie; use App\models\Login; /** * 用戶登錄控制器 * @author Robin * */ class LoginController extends BaseController { /** * 設置路徑 */ private $path; function __construct() { $this->path = [ "getIndex" => URL::action("LoginController@getIndex"), "postIndex" => URL::action("LoginController@postIndex") ]; } /** * 登錄頁面 */ public function getIndex() { return View::make("login", [ "path" => $this->path ]); } /** * 提交登錄 * @return \Illuminate\Http\RedirectResponse */ public function postIndex() { // new一個登錄頁面的模型 $login = new Login(); // 轉換用戶輸入爲用戶登錄模型對象 $login->convert(Input::All()); // 判斷用戶輸入是否合法 if ($login->isValid()) { // 判斷用戶名密碼是否正確 if ($login->username == "admin" && $login->password == "admin") { // 新增一個用戶對象數組,用於輸出到cookie $user = [ "username" => $login->username ]; // cookie輸出 Cookie::queue("TOKEN", json_encode($user), 3600); // 頁面跳轉到另外一個頁面 return redirect()->action("my\MyTest2Controller@getIndex"); } else { // 用戶登錄抵帳,返回view return View::make("login", [ "login" => $login, "errorMessage" => "User name or password error.", "path" => $this->path ]); } } else { // 用戶輸入不合法,返回view return View::make("login", [ "login" => $login, "messages" => $login->messages(), "path" => $this->path ]); } } } ?>
新建一個登錄視圖
resources\views\login.blade.php
<?php ?> <font color="red">{{isset($errorMessage) ? $errorMessage : ""}}</font> <form action="{{$path['postIndex']}}" method="post"> UserName:<input name="username" type="text" value="{{isset($login) ? $login->username : ''}}" />{!!isset($messages) ? $messages->first('username', '<span style="color:red;">:message</span>') : ""!!}<br/> Password:<input name="password" type="password" />{!!isset($messages) ? $messages->first('password', '<span style="color:red;">:message</span>') : ""!!}<br/> <input type="submit" value="Login" /> </form>
Laravel自動已經爲Cookie作了加密設置,須要修改加密密碼,能夠在這裏修改:
打開:config\app.php
找到:
'key' => env('APP_KEY', 'SomeRandomString'),
默認密碼爲:SomeRandomString,修改成你本身的密碼。密碼長度爲:1六、2四、32個字符。