Skip to content
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ By default all fields are returned, you can limit that to specific fields in the

## Relationships

* Using the relationships defined in your models, you can pass a comma delimited list eg `with=join1,join2` which will return those joins (one or many)
* Using the relationships defined in your models, you can pass a comma delimited list eg `include=join1,join2` which will return those joins (one or many)

## Sorting

Expand Down
12 changes: 11 additions & 1 deletion src/Events/Created.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,24 @@ class Created
*/
public $record;

/**
* the request object.
*
* @var \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest
*/
public $request;

/**
* Create a new event instance.
*
* @param \Illuminate\Database\Eloquent\Model $record
* @param \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest $request
*
* @return void
*/
public function __construct($record)
public function __construct($record, $request)
{
$this->record = $record;
$this->request = $request;
}
}
12 changes: 11 additions & 1 deletion src/Events/Deleted.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,24 @@ class Deleted
*/
public $record;

/**
* the request object.
*
* @var \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest
*/
public $request;

/**
* Create a new event instance.
*
* @param \Illuminate\Database\Eloquent\Model $record
* @param \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest $request
*
* @return void
*/
public function __construct($record)
public function __construct($record, $request)
{
$this->record = $record;
$this->request = $request;
}
}
12 changes: 11 additions & 1 deletion src/Events/Updated.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,24 @@ class Updated
*/
public $record;

/**
* the request object.
*
* @var \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest
*/
public $request;

/**
* Create a new event instance.
*
* @param \Illuminate\Database\Eloquent\Model $record
* @param \Illuminate\Http\Request|\Illuminate\Foundation\Http\FormRequest $request
*
* @return void
*/
public function __construct($record)
public function __construct($record, $request)
{
$this->record = $record;
$this->request = $request;
}
}
42 changes: 21 additions & 21 deletions src/Generator/stubs/controller.stub
Original file line number Diff line number Diff line change
Expand Up @@ -17,72 +17,72 @@ class {{controller.name}} extends Controller
}


/**
/**
* Display a listing of the resource.
* GET /api/{resource}.
*
* @param Request $request
*
* @param Request $request
*
* @return Response
*/
public function index(Request $request)
{
return parent::index($request);
}
{
return $this->handleIndexAction($request);
}

/**
* Store a newly created resource in storage.
* POST /api/{resource}.
*
* @param Request $request
*
* @return Response
*/
/**
* Store a newly created resource in storage.
* POST /api/{resource}.
*
* @param Request $request
*
* @return Response
*/
public function store(Request $request)
{
return parent::store($request);
return $this->handleStoreAction($request);
}

/**
* Display the specified resource.
* GET /api/{resource}/{id}.
*
* @param int $id
* @param Request $request
* @param Request $request
*
* @return Response
*/
public function show($id, Request $request)
{
return parent::show($id, $request);
return $this->handleShowAction($id, $request);
}

/**
* Update the specified resource in storage.
* PUT /api/{resource}/{id}.
*
* @param int $id
* @param Request $request
* @param Request $request
*
* @return Response
*/
public function update($id, Request $request)
{
return parent::update($id, $request);
return $this->handleUpdateAction($id, $request);
}

/**
* Remove the specified resource from storage.
* DELETE /api/{resource}/{id}.
*
* @param int $id
* @param Request $request
* @param Request $request
*
* @return Response
*/
public function destroy($id, Request $request)
{
return parent::destroy($id, $request);
return $this->handleDestroyAction($id, $request);
}

}
36 changes: 28 additions & 8 deletions src/Http/Controllers/Api/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,12 @@ protected function makeRepository()
*
* @return Response
*/
public function index(Request $request)
public function handleIndexAction($request)
{
if (! is_a($request, Request::class)) {
throw new ApiException("Request should be an instance of Illuminate\Http\Request");
}

$this->request = $request;
$this->uriParser = new UriParser($this->request, config('laravel-api-controller.parameters.filter'));

Expand All @@ -134,8 +138,12 @@ public function index(Request $request)
*
* @return Response
*/
public function store(Request $request)
public function handleStoreAction($request)
{
if (! is_a($request, Request::class)) {
throw new ApiException("Request should be an instance of Illuminate\Http\Request");
}

$data = $request->all();

if (empty($data)) {
Expand All @@ -156,7 +164,7 @@ public function store(Request $request)

try {
$item = $this->model->create($insert);
event(new Created($item));
event(new Created($item, $request));
} catch (\Exception $e) {
return $this->errorWrongArgs($e->getMessage());
}
Expand All @@ -172,8 +180,12 @@ public function store(Request $request)
*
* @return Response
*/
public function show($id, Request $request)
public function handleShowAction($id, $request)
{
if (! is_a($request, Request::class)) {
throw new ApiException("Request should be an instance of Illuminate\Http\Request");
}

$this->request = $request;
$this->uriParser = new UriParser($this->request, config('laravel-api-controller.parameters.filter'));

Expand All @@ -197,8 +209,12 @@ public function show($id, Request $request)
*
* @return Response
*/
public function update($id, Request $request)
public function handleUpdateAction($id, $request)
{
if (! is_a($request, Request::class)) {
throw new ApiException("Request should be an instance of Illuminate\Http\Request");
}

$data = $request->all();

if (empty($data)) {
Expand All @@ -225,7 +241,7 @@ public function update($id, Request $request)
$item->fill($fields);
$item->save();

event(new Updated($item));
event(new Updated($item, $request));

return $this->respondWithOne($item);
}
Expand All @@ -238,12 +254,16 @@ public function update($id, Request $request)
*
* @return Response
*/
public function destroy($id, /** @scrutinizer ignore-unused */ Request $request)
public function handleDestroyAction($id, $request)
{
if (! is_a($request, Request::class)) {
throw new ApiException("Request should be an instance of Illuminate\Http\Request");
}

try {
$item = $this->repository->getById($id);
$this->repository->deleteById($id);
event(new Deleted($item));
event(new Deleted($item, $request));
} catch (ModelNotFoundException $e) {
return $this->errorNotFound('Record does not exist');
}
Expand Down