Skip to content

Instantly share code, notes, and snippets.

@ahmadrio
Last active October 10, 2019 05:55
Show Gist options
  • Save ahmadrio/d003c3a2fc22eae5e89f6cc2bcfddb4d to your computer and use it in GitHub Desktop.
Save ahmadrio/d003c3a2fc22eae5e89f6cc2bcfddb4d to your computer and use it in GitHub Desktop.
<?php
namespace App\Http\Controllers\Post;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\DB;
use Laravel\Nova\Actions\ActionEvent;
use Laravel\Nova\Http\Requests\CreateResourceRequest;
class StoreController extends Controller
{
/**
* Create a new resource.
*
* @param \Laravel\Nova\Http\Requests\CreateResourceRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function handle(CreateResourceRequest $request)
{
$resource = $request->resource();
$resource::authorizeToCreate($request);
$resource::validateForCreation($request);
$model = DB::transaction(function () use ($request, $resource) {
[$model, $callbacks] = $resource::fill(
$request, $resource::newModel()
);
// code untuk kelola sebelum penyimpanan
// AnotherModel::create();
if ($request->viaRelationship()) {
$request->findParentModelOrFail()
->{$request->viaRelationship}()
->save($model);
} else {
$model->save();
}
// code untuk kelola setelah penyimpanan
// AnotherModel::create();
ActionEvent::forResourceCreate($request->user(), $model)->save();
collect($callbacks)->each->__invoke();
return $model;
});
return response()->json([
'id' => $model->getKey(),
'resource' => $model->attributesToArray(),
'redirect' => $resource::redirectAfterCreate($request, $request->newResourceWith($model)),
], 201);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment