Bonjour,
Je récupère des lignes de base de données dans un try, or si l'élement cherché n'existe pas il ne déclenche pas le catch et me renvoie le code 500 et la page 404. J'ai essayé avec l'exception de type Exception et ModelNotFoundException mais rien ne change.

Mon code est :

    public function media_show($media)
    {
        try {
            $statusCode = 200;
            $media = Media::findOrFail($media);
        } catch (Exception  $e) {
            $statusCode = 400;
            $media = $e;
        } finally {
            return  \Response::json($media, $statusCode);
        }
    }

Merci de votre aide

5 réponses


Salut, de mon point de vue cette logique n'appartient pas vraiment au controlleur
alors je pense fair ca est mieu:
dans le controlleur

$statusCode = 200;
$media = Media::findOrFail($media);

et dans un fichier (Router/ Filter )

App::error(function(ModelNotFoundException $exception)
{
    return Response::json($exception, 400);
});

cela vas rendre votre logique global.

sinon, si c'est juste pour votre exemple, juste change le Exception par \ModelNotFoundException

C'est ça, jette un oeil dans la doc http://laravel.com/docs/4.2/eloquent#basic-usage, tu as un exemple.

Merci à vous 2 pour vos réponses. Je me suis mal exprimé car je ne cherche pas à redéfinir le handler général d'erreurs. En fait je fais une api, et donc lorsque la requête trouve l'enregistrement je le renvoie avec d'autres valeurs, sinon je veux renvoyer un code erreur (400, 404,..) ansi qu'un message d'erreur. Il n'y a donc que dans ce controller que j'ai besoin de gérer mes erreurs et exceptions.

Pour le moment j'ai le code qui marche bien

public function media_show($media)
{
    $media = Media::find($media);

    if ($media) {
        $statusCode = 200;
    } else {
        $statusCode = 404;
        $media['error'] = 'Line not found';
    }

    return  \Response::json($media, $statusCode);
}

Je voulais juste passer par un try/catch car je trouve cela plus "joli" :)

Tu as essayé la solution de OverSoul, juste change le Exception par \ModelNotFoundException ?

Oui je l'avais d'ailleurs précisé dans ma question :)