Autour de Laravel

[laravel 8] API

Avatar de Slobug
Slobug

Bonjour,

Je teste une api et je rencontre un problème avec la version recommendée (la 1), alors qu'avec la 2è ça fonctionne:

// 1)
    public function show(Article $article)
    {
        return $article;
    }
   // 2)
       public function show($article)
    {
        return Article::findOrFail($article);
    }

Le souci c'est que d'autres fonctions sont prévues sur le modèle qui ne fonctionne pas ;O), j'aimerai donc résoudre mon problème.

Pourriez-vous m'éclairer ?

Merci d'avance

Posté il y a 1 mois
Avatar de VassiliJoffroy
VassiliJoffroy

Bonjour,

as-tu le SoftDeletes sur tes Articles ?

Posté il y a 1 mois
Avatar de obbysidaneYouta
obbysidaneYouta

Hey, quelles erreurs as tu? Déjà il faut savoir que avec la première syntaxe, si ton model n existe pas, il renvoie une NotFoundException(404) Le I'd de l article que tu envoies doit être dans ta table. Si tu ne veux pas avoir une NotFoundException. Tu peux utiliser le deuxieme Mais dans ton test en fait tu peux faire $response->assertStatus(404); pour valider que ton model est introuvable. Tu peux aussi regarder le contenu de la réponse en utilisant un var_dump($response) , par contre ça je ne sais pas si c'est recommandé.

Posté il y a 1 mois
Avatar de Slobug
Slobug

Bonjour et merci pour vos retours ;)

pour le SoftDeletes, non je n'ai pas ça dans mon code.

Pour ce qui est des erreurs, j'en ai pas :O) j'ai un tableau vide avec un code 200 avec la forme 1 de mon premier post.

Posté il y a 1 mois
Avatar de bestmomo
bestmomo

Bonjour,

Tu peux montrer le code de la route ? Je suppose que tu as quelque chose dans ce genre :

Route::get('articles/{id}', [ArticleController::class, 'show']);

Si tu veux que le binding fonctionne il faut changer le nom du paramètre :

Route::get('articles/{article}', [ArticleController::class, 'show']);
Posté il y a 1 mois
Avatar de Slobug
Slobug

Bonjour et merci Bestmomo (les autres aussi ;) ),

Effectivement ta réponse est la bonne.

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.