In my routes.php, I have this:
$apiSettings = [
'version' => 'v1',
'prefix' => 'api',
'protected' => true
];
Route::api($apiSettings, function() {
Route::get('venue', 'ApiDataController@venue');
});
The protected venue API route accesses a controller method. The controller method performs the Eloquent Query on a Venues model, and returns the response. This works perfectly. The issue is in if I want to return an error - I am unsure how to. Here is the Venue Method:
public function venue(){
try {
//Some code that returns an exception
} catch(someexception $e) {
//How do I return the exception such that Dingo will parse it into a proper JSON response?
}
$response = Venue::with('address')->get();
return $response;
}
My attempted solution (in the try block):
try {
//some code that returns an exception
} catch(someexception $e) {
$response = array(
'message' => 'some random exception message'
);
return Response::json($response, 403);
}
I got the following error when I attempted to do that:
Argument 1 passed to Dingo\Api\Http\Response::makeFromExisting() must be an instance of Illuminate\Http\Response, instance of Illuminate\Http\JsonResponse given, called in /vagrant/www/planat-app/vendor/dingo/api/src/Routing/Router.php on line 165 and defined
Second Attempted Solution: From Dingo's Returning Errors, docs, I tested what would happen if I returned one of the exceptions:
public function venue(){
throw new Symfony\Component\HttpKernel\Exception\ConflictHttpException('err);
}
However, instead of returning the error as a JSON response, a laravel error page comes up, with the following error displayed:
[internal function]: ApiDataController->venue() #1 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(231): call_user_func_array(Array, Array) #2 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(93): Illuminate\Routing\Controller->callAction('venue', Array) #3 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(62): Illuminate\Routing\ControllerDispatcher->call(Object(ApiDataController), Object(Illuminate\Routing\Route), 'venue') #4 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(930): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Dingo\Api\Http\InternalRequest), 'ApiDataControll...', 'venue') #5 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}() #6 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(105): call_user_func_array(Object(Closure), Array) #7 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996): Illuminate\Routing\Route->run(Object(Dingo\Api\Http\InternalRequest)) #8 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(964): Illuminate\Routing\Router->dispatchToRoute(Object(Dingo\Api\Http\InternalRequest)) #9 /vagrant/www/planat-app/vendor/dingo/api/src/Routing/Router.php(147): Illuminate\Routing\Router->dispatch(Object(Dingo\Api\Http\InternalRequest)) #10 /vagrant/www/planat-app/vendor/dingo/api/src/Dispatcher.php(337): Dingo\Api\Routing\Router->dispatch(Object(Dingo\Api\Http\InternalRequest)) #11 /vagrant/www/planat-app/vendor/dingo/api/src/Dispatcher.php(278): Dingo\Api\Dispatcher->dispatch(Object(Dingo\Api\Http\InternalRequest)) #12 /vagrant/www/planat-app/vendor/dingo/api/src/Dispatcher.php(213): Dingo\Api\Dispatcher->queueRequest('get', 'venue', Array) #13 /vagrant/www/planat-app/app/routes.php(51): Dingo\Api\Dispatcher->get('venue') #14 [internal function]: {closure}() #15 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(105): call_user_func_array(Object(Closure), Array) #16 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request)) #17 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(964): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #18 /vagrant/www/planat-app/vendor/dingo/api/src/Routing/Router.php(147): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #19 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(738): Dingo\Api\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #20 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(708): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request)) #21 /vagrant/www/planat-app/vendor/dingo/api/src/Http/Middleware/RateLimit.php(97): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true) #22 /vagrant/www/planat-app/vendor/dingo/api/src/Http/Middleware/Authentication.php(102): Dingo\Api\Http\Middleware\RateLimit->handle(Object(Illuminate\Http\Request), 1, true) #23 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Session/Middleware.php(72): Dingo\Api\Http\Middleware\Authentication->handle(Object(Illuminate\Http\Request), 1, true) #24 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true) #25 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true) #26 /vagrant/www/planat-app/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true) #27 /vagrant/www/planat-app/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(606): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request)) #28 /vagrant/www/planat-app/public/index.php(49): Illuminate\Foundation\Application->run()
app/storage/logs/laravel.log
too. – Unnawut[internal function]:
– Unnawut