Skip to content

Instantly share code, notes, and snippets.

@nicholascourage
Created January 30, 2025 16:11
Show Gist options
  • Save nicholascourage/8a8e0cd5639e089232e4e7f2c5b2d4d1 to your computer and use it in GitHub Desktop.
Save nicholascourage/8a8e0cd5639e089232e4e7f2c5b2d4d1 to your computer and use it in GitHub Desktop.
Base API Controller
<?php
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpFoundation\Response;
use Validator;
class BaseApiController extends Controller
{
/**
* Model
*
* @var
*/
protected $model;
/**
* BaseApiController constructor.
* @param $model
*/
public function __construct($model)
{
$this->model = $model;
}
/**
* Create model
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
$validator = Validator::make($request->all(), $this->model->rulesCreate);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], Response::HTTP_NOT_ACCEPTABLE);
}
$model = $this->model->create($request->all());
return response()->json(['success' => true, 'data' => $model])->setStatusCode(Response::HTTP_CREATED);
}
/**
* Update model
*
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), $this->model->rulesUpdate);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], Response::HTTP_NOT_ACCEPTABLE);
}
$model = $this->model->findOrFail($id);
$model->update($request->all());
return response()->json(['success' => true])->setStatusCode(Response::HTTP_ACCEPTED);
}
/**
* Read model
*
* @return \Illuminate\Http\Response
*/
public function read(Request $request, $id)
{
$model = $this->model->findOrFail($id);
return response()->json($model);
}
/**
* Delete model
*
* @param int $id
* @return Response
*/
public function delete(Request $request, $id): Response
{
$model = $this->model->findOrFail($id);
$model->delete();
return response(['success' => true])->setStatusCode(Response::HTTP_ACCEPTED);
}
/**
* Index models
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
if(isset($request->per_page))
return $this->model->paginate($request->per_page);
else
return $this->model->paginate(config('app.results_per_page'));
return $this->model->all()->toJson();
}
/**
* Count models
*
* @return \Illuminate\Http\Response
*/
public function count(Request $request)
{
return response(['count' => $this->model->count()]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment