Home  >  Article  >  Backend Development  >  Detailed explanation of the responsive interface provided in Laravel 5.5 for responding to requests_php example

Detailed explanation of the responsive interface provided in Laravel 5.5 for responding to requests_php example

韦小宝
韦小宝Original
2017-12-04 11:43:471557browse

This article mainly introduces you to the relevant information about the responsive interface provided in Laravel 5.5 for responding to requests. The Laravel introduced through the sample code is very detailed and is very useful. Everyone's study or work has certain reference learning value. Friends who need it can follow the editor to learn Laravel .

Preface

Laravel 5.5 will also be the next LTS (long-term support) version. That means it has two years of fixes and three years of security updates. The same goes for Laravel 5.1, although its two years of bug-fix support will end this year.

Laravel 5.5 adds a new return type to routing: Responsable interface. This interface allows objects to be automatically converted into a standard HTTP response interface when returned from a controller or closure route. Any object that implements the Responsable interface must implement a method named toResponse(), which converts the object into an HTTP response object.

Look at the example:


##

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]
  );
 }
}


When using this ExampleObject in routing, you You can do this:


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


In Laravel

Framework, the Route class can now check when preparing the response content This type (that implements the Responsable interface):


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


If you are in App\Http\Responses

Namespace Use multiple response types to organize your response content. You can refer to the following example. This example demonstrates how to support Posts (a collection of multiple instances):


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(),
   ];
  });
 }
}


The above is just a basis for simulating a simple application scenario Example: Return a JSON response, but you hope that the response layer does not simply use the built-in implementation to JSONize the object, but does some content processing. The above examples also assume that the App\Http\Responses\Response class can provide some basic functions. Of course, the response layer can also contain some conversion code (similar to Fractal) instead of doing such conversion directly in the controller.

The controller code that cooperates with the PostIndexResponse class in the above example is similar to the following:

If you want to know more details about this interface, you can view the commit of the relevant code in the project.

Summary

The above is all the content of this article, I hope it can be helpful to everyone.


Related recommendations:

How to implement Laravel 5.5 responsive interface

Laravel’s verification code library

Detailed explanation of cross-domain solutions in laravel development

The above is the detailed content of Detailed explanation of the responsive interface provided in Laravel 5.5 for responding to requests_php example. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn