Laravel-01-請求和響應對象理解分析


在Laravel裏,主要是對請求和響應作了對象化處理,因此要充分理解對象化編程的理念。php

獲取請求對象

從這裏開始要講Http的請求和響應,要先對http協議進行充分的預習和了解。html

在Laravel裏,主要是對請求和響應作了對象化處理,因此要充分理解對象化編程的理念。laravel

咱們的一個表單中提交上來的信息,是怎麼傳送到控制器裏進行處理的呢?編程

先來看個路由:api

Route::post('user', 'UserController@store');


   這個路由就是用來提交表單信息的,接下來咱們來看看UserController中怎麼寫: 傳統的寫法數組

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Input;
class UserController extends Controller
{   
 public function store()  
  { 
   $name = Input::get('name');
    //    
  }
 }

   

  這裏的Input::get('name');就至關於php 的$_GET('name');下面咱們來看用Request對象怎麼寫:session

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{ 
   public function store(Request $request)
   {
      $name = $request->input('name');       
       //  
    }
 }

       這裏又出現了Request $request這種控制器方法依賴注入的寫法,看文檔就是有這個問題,好多概念不分前後,混在一塊兒講;總之你須要知道這樣寫,就能夠獲得一個$request對象。使用對象後,比起只是用$_GET('name');取得一個值,功能要強大不少,後面會有講到;
post

Request $request 這種(Typehint)寫法,其實不是輸入一個參數,而是注入了一個 對象,可是若是我要加入參數怎麼辦:寫在後面!:url

路由spa

Route::put('user/{id}', 'UserController@update');

控制器

<?phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
   public function update(Request $request, $id)
   {       
    //    
    }
 }


基本的請求對象操做

請求URL相關

獲取發出請求的完整URL:

$url = $request->url();

獲取URL相對路徑:

$uri = $request->path();

判斷請求是否來自某個url:

if ($request->is('admin/*'))
{  
  //
 }

判斷請求的方法

$method = $request->method();
if($request->isMethod('post')) 
{   
 //
 }

獲取請求值

$name = $request->input('name');

若是你不能肯定有沒有這個name,你能夠:

$name = $request->input('name', 'Sally');

這樣就能夠在name沒有的狀況下設置一個name及其默認值; 若是傳過來的是個數組:

$input = $request->input('products.0.name');

你能夠用這種方式取值,超級方便。

取所有值

$input = $request->all();

這將獲得一個數組;

限制取值

$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');

把Input值放到Session裏

表單提交數據,通常刷新後就沒了,有時候你須要重複使用它們,通常能夠放它們放到Session裏:

$request->flash();

相似以前的知識,咱們能夠對request的值作一些限制:

$request->flashOnly('username', 'email');
$request->flashExcept('password');

更多的應用是在重定向的時候:

 return redirect('form')->withInput();
 return redirect('form')->withInput($request->except('password'));

withInput() 就能夠把request裏所有的值發給Session,若是須要進行一些限制,能夠這樣寫withInput($request->except('password'));

取回request發給session的值

$username = $request->old('username');

在視圖中(這裏還沒講到blade模板,先記着),能夠在表單中這樣寫:

<input name="username" value="{{ old('username') }}"/>

這樣若是用戶表單填錯了,再重定向返回的時候,表單就能夠記住上次用戶輸入的數據;

文件請求

文件請求是一種特殊的請求,涉及到文件在磁盤上的操做;

獲取上傳的文件

$file = $request->file('photo');

這裏獲取到的是一個文件對象;

檢查是否有某上傳文件

if ($request->hasFile('photo'))
{    
  //
}

檢查上傳文件是否成功

if ($request->file('photo')->isValid())
{
  //
}

移動上傳文件

$request->file('photo')->move($destinationPath);
$request->file('photo')->move($destinationPath, $fileName);

$destinationPath 必須是一個完整的磁盤路徑,後面能夠加個$fileName給文件重命名;

對於上傳文件的操做還有一系列Api,請參考:Symfony\Component\HttpFoundation\File\UploadedFile


參考原文:http://laravelbase.com/collections/1/39

相關文章
相關標籤/搜索