Laravel框架處理用戶的請(qǐng)求操作詳解
本文實(shí)例講述了Laravel框架處理用戶的請(qǐng)求操作。分享給大家供大家參考,具體如下:
1、請(qǐng)求對(duì)象Request
Request中包含了用戶請(qǐng)求的一些信息,使用該對(duì)象首先需要use Illuminate\Http\Request類,之后在參數(shù)中傳入該對(duì)象,
public static function getRequest(Request $request) { //獲取請(qǐng)求類型 echo "請(qǐng)求類型" . $request->method() . "<br/>"; //判斷請(qǐng)求類型 if ($request->isMethod('POST')){} //請(qǐng)求的url echo "url:" . $request->url(); //判斷請(qǐng)求路徑是否匹配 if ($request->is('*/index')) echo '這是主頁'; //獲取請(qǐng)求中的值 if ($request->has('val')) { var_dump($request->input('val')); } }
2、響應(yīng)對(duì)象Response
通過return語句可以對(duì)響應(yīng)作出返回,當(dāng)return一個(gè)數(shù)組時(shí),laravel會(huì)自動(dòng)將其轉(zhuǎn)化為JSON格式,如果需要將某個(gè)數(shù)據(jù)轉(zhuǎn)化為JSON可以使用response()->json():
return response()->json($data);
response()方法支持自定義狀態(tài)碼與響應(yīng)頭:
return response($data, 200) ->header('Content-Type', 'text/plain');
response()->download($path,$name)使瀏覽器下載指定路徑的文件:
return response()->download(storage_path('app/photo/test.jpg'), '測試圖片.jpg');
3、重定向
通過redirect()函數(shù)來實(shí)現(xiàn)頁面的重定向
//重定向到命名路由,帶參數(shù) return redirect()->route('redirect',['name'=>'tory']); //重定向到路由,帶一次性Session return redirect('redirect')->with('msg','redirect'); //重定向到controller return redirect()->action('Login@redirect'); //重定向到上一界面 return redirect()->back();
通過with可以將數(shù)據(jù)通過session傳給頁面,之后通過Session::get('msg')來獲取數(shù)據(jù),這也是兩個(gè)頁面之間跳轉(zhuǎn)時(shí)數(shù)據(jù)傳遞較為安全的方法。
4、中間件
Laravel提供了中間件機(jī)制用于對(duì)用戶的請(qǐng)求request進(jìn)行過濾,并在返回response之前進(jìn)行處理。這種機(jī)制在nodeJS的express框架中也有,被成為攔截器,對(duì)用戶的請(qǐng)求先進(jìn)行過濾再轉(zhuǎn)發(fā)到應(yīng)用Application。中間件文件存放在app/Http/Middleware目錄下,其中包括認(rèn)證、CSRF保護(hù)中間價(jià)等。比如認(rèn)證驗(yàn)證中間件會(huì)驗(yàn)證用戶是否經(jīng)過認(rèn)證(如登錄),如果用戶沒有經(jīng)過認(rèn)證,中間件會(huì)將用戶重定向到登錄頁面,而如果用戶已經(jīng)經(jīng)過認(rèn)證,中間件就會(huì)允許請(qǐng)求繼續(xù)往前進(jìn)入下一步操作。
4.1、定義中間件
在中間件的目錄下新建一個(gè)php類,用于對(duì)活動(dòng)頁面的請(qǐng)求進(jìn)行攔截,當(dāng)日期沒有到達(dá)指定日期之前將對(duì)活動(dòng)的請(qǐng)求重定向到noActivity路由:
namespace App\Http\Middleware; use Closure; class Activity { public function handle($request,Closure $next){ //如果時(shí)間小于指定時(shí)間則跳轉(zhuǎn)到noActivity路由 if (time()<strtotime('2018-5-12')){ return redirect('noActivity'); }else { //時(shí)間符合則執(zhí)行下一步并把請(qǐng)求request傳遞給下一步 return $next($request); } } }
后置中間件則是先執(zhí)行請(qǐng)求操作并返回給$response,在執(zhí)行完后置操作后再返回
public function handle($request, Closure $next) { $response = $next($request); //先執(zhí)行請(qǐng)求 // 執(zhí)行后置中間件操作 return $response; }
注意不可以直接return內(nèi)容,而是需要通過response()函數(shù)返回你的內(nèi)容
return response(array('status'=>2,'msg'=>"請(qǐng)先登錄!"))
4.2、注冊路由
中間件的注冊在app/Http/kernel.php文件中的Kernel類,其中有三個(gè)屬性:
- $middleware屬性用于定義全局中間件,每個(gè)http請(qǐng)求都需要通過全局中間件。
- $middlewareGroups屬性用于定義中間件組,比如你需要給某個(gè)路由指定多個(gè)中間件,分別指定太過麻煩,你可以把它們放在一個(gè)中間件組中。例如中間件組api包括兩個(gè)中間件throttle:60,1與bindings
'api' => [ 'throttle:60,1', 'bindings', ],
- $routeMiddleware屬性用于注冊分配中間件給指定的路由。
注冊中間件需要為中間件指定一個(gè)key值,用于分配中間件給指定路由時(shí)使用,并對(duì)應(yīng)中間件的路徑
protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'activity'=>\App\Http\Middleware\Activity::class //注冊activity中間件 ];
4.3、使用中間件
在定義路由時(shí)通過middleware()方法將中間件指定到某個(gè)路由:
Route::get('activity','Login@activity')->middleware('activity');
5、Session
在PHP中使用$_SESSION來在服務(wù)器端儲(chǔ)存用戶的登錄信息等數(shù)據(jù),Laravel中不使用PHP默認(rèn)的session,而是自己實(shí)現(xiàn)了一套session機(jī)制。session默認(rèn)使用文件來驅(qū)動(dòng)的,可以在config/session.php中修改其驅(qū)動(dòng)方式為redis或者數(shù)據(jù)庫。
可以通過以下三種方式訪問session
- 通過request對(duì)象訪問session
- 通過輔助函數(shù)session()訪問
- 通過Session類來訪問
//使用HTTP request session echo '<br/>'; $request->session()->put('key','value'); echo $request->session()->get('key'); //使用輔助函數(shù)session echo "<br/>"; session(['key2'=>'value2']); echo "session輔助函數(shù)".session('key2'); //Session類 Session::put(['key3'=>'val3']); echo Session::get('key3')
獲取所有session數(shù)組:
$res=Session::all();
刪除session:
Session::forget('key'); //刪除指定session Session::flushu(); //刪除所有session
存入數(shù)組:
Session::push('arr','val4'); Session::push('arr','val5'); var_dump(Session::get('arr'));
從session中拿出數(shù)據(jù)并刪除:
$res=Session::pull('arr'); //取出數(shù)據(jù)并刪除
存入一次性數(shù)據(jù),存入之后只允許取出一次后就刪除:
Session::flash('key5','val5');
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
上一篇:Laravel5.1框架路由分組用法實(shí)例分析
欄 目:PHP編程
下一篇:PHP配合fiddler抓包抓取微信指數(shù)小程序數(shù)據(jù)的實(shí)現(xiàn)方法分析
本文標(biāo)題:Laravel框架處理用戶的請(qǐng)求操作詳解
本文地址:http://mengdiqiu.com.cn/a1/PHPbiancheng/10997.html
您可能感興趣的文章
- 01-11thinkphp框架類庫擴(kuò)展操作示例
- 01-11關(guān)于Yii2框架跑腳本時(shí)內(nèi)存泄漏問題的分析與解決
- 01-11php 實(shí)現(xiàn)簡單的登錄功能示例【基于thinkPHP框架】
- 01-11Laravel 微信小程序后端搭建步驟詳解
- 01-11Laravel框架Blade模板簡介及模板繼承用法分析
- 01-11Laravel 微信小程序后端實(shí)現(xiàn)用戶登錄的示例代碼
- 01-11Laravel框架基礎(chǔ)語法與知識(shí)點(diǎn)整理【模板變量、輸出、include引入
- 01-11Laravel框架Eloquent ORM刪除數(shù)據(jù)操作示例
- 01-11Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例
- 01-11Laravel框架Eloquent ORM簡介、模型建立及查詢數(shù)據(jù)操作詳解


閱讀排行
本欄相關(guān)
- 04-02php本站才可以請(qǐng)求數(shù)據(jù) php本地?cái)?shù)據(jù)庫
- 04-02關(guān)于txt數(shù)據(jù)庫php的信息
- 04-02php打印請(qǐng)求數(shù)據(jù) php打印輸出結(jié)果
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂
- 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
- 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)
- 04-02數(shù)據(jù)權(quán)限架構(gòu)思路php 數(shù)據(jù)權(quán)限設(shè)計(jì)方
- 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)
- 04-02php如何用導(dǎo)入數(shù)據(jù) php用來導(dǎo)入其他文
隨機(jī)閱讀
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)