如何?Laravel 5.5可響應介面

來源:互聯網
上載者:User
Laravel是一套簡潔、優雅的PHP Web開發架構(PHP Web Framework)。它可以讓你從麵條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網路APP,而且每行代碼都可以簡潔、富於表達力。

Laravel 5.5 的路由中增加了一種新的傳回型別:可相應介面( Responsable )。該介面允許對象在從控制器或者閉包路由中返回時自動被轉化為標準的 HTTP 響應介面。任何實現 Responsable 介面的對象必須實現一個名為 toResponse() 的方法,該方法將對象轉化為 HTTP 響應對象。

看樣本:

use Illuminate\Contracts\Support\Responsable;  class ExampleObject implements Responsable{ public function __construct($name = null) {  $this->name = $name ?? 'Teapot';  }   public function status() {  switch(strtolower($this->name)) {   case 'teapot':    return 418;   default:    return 200;  } }   public function toResponse() {  return response(   "Hello {$this->name}",   $this->status(),   ['X-Person' => $this->name]  ); }}

在路由中使用這個 ExampleObject 的時候,你可以這樣做:

Route::get('/hello', function() { return new ExampleObject(request('name'));});

在 Laravel 架構中, Route 類如今可以在準備響應內容時檢查這種(實現了 Responsable 介面的)類型:

if ($response instanceof Responsable) { $response = $response->toResponse();}

假如你在 App\Http\Responses 命名空間下用多個響應類型來組織你的響應內容,可以參考下面這個樣本。該樣本示範了如何支援 Posts (多個執行個體組成的 Collection):

posts = $posts; }   public function toResponse() {  return response()->json($this->transformPosts()); }   protected function transformPosts() {  return $this->posts->map(function ($post) {   return [    'title' => $post->title,    'description' => $post->description,    'body' => $post->body,    'published_date' => $post->published_at->toIso8601String(),    'created' => $post->created_at->toIso8601String(),   ];  }); }}

以上只是一個類比簡單應用情境的基礎樣本:返回一個 JSON 響應,但你希望響應層不是簡單地用內建實現把對象 JSON 化,而是要做一些內容處理。以上樣本同時假設 App\Http\Responses\Response 這個類能提供一些基礎的功能。當然響應層也可以包含一些轉碼(類似 Fractal ),而不是直接在控制器裡做這樣的轉換。

與上面樣本中的 PostIndexResponse 類協作的控制器代碼類似以下這樣:

如果你想瞭解更多有關這個介面的細節,可以查看項目中 相關代碼的 commit .

以上內容就是Laravel 5.5中為響應請求提供的可響應介面詳解,希望能協助到大家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.