Search code examples
laravellaravel-5api-designlaravel-5.5laravel-response

Laravel 5.5 - Only log 500 error, never send error details via api?


I made the below controller to demonstrate the issue of handling 500 errors I am having with the api. I want to be able to detect when a 500 error will be thrown so it never makes it to the client (as it is too much details to share with the client and they should only be logged by Laravel).

The methodgetUser() returns a 500 error intentionally due to the typo firsgt()

class TestController extends Controller {
  public function getUser() {
    $data = User::firsgt(); //returns 500 error
    return $data;
  }
}

This is what the client sees: enter image description here

How can we return an error message like 'Error occurred' instead of the too much details for client 'Call to undefined method App\User::firsgt()'?

Note: I don't want to handle it one by one for each controller method, but instead capture any 500 before it is returned to client, and return the custom 500 generic message 'Error occurred'


Solution

  • Just change the variables in your .env file to prevent these messages from being sent with the response.

    APP_ENV=production

    APP_DEBUG=false
    

    Edit: just setting APP_DEBUG to false is enough.

    Update: If you're using dingo api package, then beside setting APP_DEBUG to false you need to edit the config file.

    If you haven't already done yet, publish dingo config file

    php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
    

    Then, open config/api.php and edit the errorFormat value to whatever message you want.

    Replace :message with a generic message