<?php namespace App\Abstracts\Http; use Illuminate\Contracts\Support\Responsable; use Illuminate\Support\Arr; use Illuminate\Support\Str; abstract class Response implements Responsable { protected $accepts = ['json', 'rss']; protected $view; protected $data; public function __construct($view, $data) { $this->view = $view; $this->data = $data; } public function toJson() { return response()->json([ 'success' => true, 'error' => false, 'data' => Arr::first($this->data), 'message' => '', ]); } public function toHtml() { return view($this->view, $this->data); } public function toResponse($request) { foreach ($this->accepts as $accept) { $request_method = 'expects' . Str::studly($accept); $response_method = 'to' . Str::studly($accept); if (!method_exists($request, $request_method) || !method_exists($this, $response_method)) { continue; } if ($request->{$request_method}()) { return $this->{$response_method}(); } } return $this->toHtml(); } }