Cover image taken from https://unsplash.com/photos/Bj6ENZDMSDY by https://unsplash.com/@benofthenorth
In Laravel, the Illuminate\Contracts\Support\Responsable
interface provides a convenient way to return HTTP responses. This interface allows you to define a toResponse method that returns a Illuminate\Http\Response
object.
Here's an example of how you can use the Responsable
interface to create a custom response class for a Laravel route:
class ProfileImageUploaded implements Responsable
{
protected $success;
public function __construct($success)
{
$this->success = $success;
}
public function toResponse($request)
{
if (!$this->success) {
return new JsonResponse('Something went wrong!', 400);
}
return new JsonResponse('Your profile image has been uploaded.');
}
}
Route::post('/profile-image', function (Requests\StoreProfileImageRequest $request) {
$image = new Services\UserProfileImage($request->user());
$success = $image->upload($request->image);
return new ProfileImageUploaded($success);
});
In this example, we have created a ProfileImageUploaded
class that implements the Responsable
interface and has a toResponse method. This method returns a JSON response indicating the status of the profile image upload.
To use the ProfileImageUploaded
class in a route, we simply return an instance of it from the route closure. Laravel will automatically detect that the returned value is an instance of a class that implements the Responsable
interface and will call the toResponse method to generate the HTTP response.
The Responsable
interface is a convenient way to keep your routes focused on handling requests and delegate the responsibility of building HTTP responses to separate classes. It can also make your code easier to test and maintain by allowing you to isolate response-building logic into separate, reusable classes.
I hope this helps you understand how to use the Illuminate\Contracts\Support\Responsable
interface in your Laravel applications!
Top comments (0)