本文實例講述了Laravel框架處理用戶的請求操作。分享給大家供大家參考,具體如下:
1、請求對象Request
Request中包含了用戶請求的一些信息,使用該對象首先需要use Illuminate\Http\Request類,之后在參數(shù)中傳入該對象,
public static function getRequest(Request $request)
{
//獲取請求類型
echo "請求類型" . $request->method() . "br/>";
//判斷請求類型
if ($request->isMethod('POST')){}
//請求的url
echo "url:" . $request->url();
//判斷請求路徑是否匹配
if ($request->is('*/index'))
echo '這是主頁';
//獲取請求中的值
if ($request->has('val')) {
var_dump($request->input('val'));
}
}
2、響應對象Response
通過return語句可以對響應作出返回,當return一個數(shù)組時,laravel會自動將其轉化為JSON格式,如果需要將某個數(shù)據(jù)轉化為JSON可以使用response()->json():
return response()->json($data);
response()方法支持自定義狀態(tài)碼與響應頭:
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ù)來實現(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ù),這也是兩個頁面之間跳轉時數(shù)據(jù)傳遞較為安全的方法。
4、中間件
Laravel提供了中間件機制用于對用戶的請求request進行過濾,并在返回response之前進行處理。這種機制在nodeJS的express框架中也有,被成為攔截器,對用戶的請求先進行過濾再轉發(fā)到應用Application。中間件文件存放在app/Http/Middleware目錄下,其中包括認證、CSRF保護中間價等。比如認證驗證中間件會驗證用戶是否經過認證(如登錄),如果用戶沒有經過認證,中間件會將用戶重定向到登錄頁面,而如果用戶已經經過認證,中間件就會允許請求繼續(xù)往前進入下一步操作。
4.1、定義中間件
在中間件的目錄下新建一個php類,用于對活動頁面的請求進行攔截,當日期沒有到達指定日期之前將對活動的請求重定向到noActivity路由:
namespace App\Http\Middleware;
use Closure;
class Activity
{
public function handle($request,Closure $next){
//如果時間小于指定時間則跳轉到noActivity路由
if (time()strtotime('2018-5-12')){
return redirect('noActivity');
}else { //時間符合則執(zhí)行下一步并把請求request傳遞給下一步
return $next($request);
}
}
}
后置中間件則是先執(zhí)行請求操作并返回給$response,在執(zhí)行完后置操作后再返回
public function handle($request, Closure $next)
{
$response = $next($request); //先執(zhí)行請求
// 執(zhí)行后置中間件操作
return $response;
}
注意不可以直接return內容,而是需要通過response()函數(shù)返回你的內容
return response(array('status'=>2,'msg'=>"請先登錄!"))
4.2、注冊路由
中間件的注冊在app/Http/kernel.php文件中的Kernel類,其中有三個屬性:
- $middleware屬性用于定義全局中間件,每個http請求都需要通過全局中間件。
- $middlewareGroups屬性用于定義中間件組,比如你需要給某個路由指定多個中間件,分別指定太過麻煩,你可以把它們放在一個中間件組中。例如中間件組api包括兩個中間件throttle:60,1與bindings
'api' => [
'throttle:60,1',
'bindings',
],
- $routeMiddleware屬性用于注冊分配中間件給指定的路由。
注冊中間件需要為中間件指定一個key值,用于分配中間件給指定路由時使用,并對應中間件的路徑
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、使用中間件
在定義路由時通過middleware()方法將中間件指定到某個路由:
Route::get('activity','Login@activity')->middleware('activity');
5、Session
在PHP中使用$_SESSION來在服務器端儲存用戶的登錄信息等數(shù)據(jù),Laravel中不使用PHP默認的session,而是自己實現(xiàn)了一套session機制。session默認使用文件來驅動的,可以在config/session.php中修改其驅動方式為redis或者數(shù)據(jù)庫。
可以通過以下三種方式訪問session
- 通過request對象訪問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ù)組:
刪除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');
更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結》、《php面向對象程序設計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。
您可能感興趣的文章:- Laravel 5.5中為響應請求提供的可響應接口詳解
- 讓Laravel API永遠返回JSON格式響應的方法示例
- Laravel+Dingo/Api 自定義響應的實現(xiàn)
- laravel http 自定義公共驗證和響應的方法
- Laravel5.1 框架Request請求操作常見用法實例分析
- 跟我學Laravel之請求與輸入
- 跟我學Laravel之請求(Request)的生命周期
- 解決laravel 出現(xiàn)ajax請求419(unknown status)的問題
- Laravel獲取當前請求的控制器和方法以及中間件的例子
- laravel請求參數(shù)校驗方法
- Laravel5.1 框架響應基本用法實例分析