J'essaie de transmettre les données de mon article à l'article d'une seule page nommé article.blade.php bien que toutes les données soient enregistrées dans la base de données, mais lorsque j'ai essayé de les renvoyer à mon avis, rien ne s'affiche et le [] était vide. Rien n'a été renvoyé.
ceci est mon articleController.php
Route::get('/articles/{articleSlug}' , 'ArticleController@single');
ceci est mon modèle:
<?php namespace App; use Cviebrock\EloquentSluggable\Sluggable; use Illuminate\Database\Eloquent\Model; class Article extends Model { use Sluggable; protected $guarded = []; protected $casts = [ 'images' => 'array' ]; public function sluggable() { return [ 'slug' => [ 'source' => 'title' ] ]; } public function path() { return "/articles/$this->slug"; } public function comments() { return $this->morphMany(Comment::class, 'commentable'); } }
et c'est mon itinéraire
<?php namespace App\Http\Controllers; use App\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function single(Article $article) { return $article; } }
3 Réponses :
Selon ce que vous essayez d'archiver, vous devez soit ...
return view(..., ['article' => $article])
.. pour la réponse json ou ..
return $article->toJson(); // or ->toArray();
pour passer un article à une certaine vue
Changez votre code en
public function getRouteKeyName() { return 'slug'; }
changez la route en
Route::get('/articles/{article}' , 'ArticleController@single');
Et modèle
class ArticleController extends Controller { public function single(Article $article) { return view('article', compact('article')); } }
Voir la documentation https://laravel.com/docs/5.7/routing # route-model-binding
Il se peut que vous n'obteniez aucune donnée car vous n'avez pas spécifié que vous utilisez title_slug comme clé de route pour la liaison de modèle dans votre modèle.
Ajoutez ceci à votre classe de modèle et cela devrait vous donner les données p>
public function getRouteKeyName() { return 'slug'; }
Ensuite, vous pouvez renvoyer les données au format json, view ou autre.
Il doit s'agir de
return view ('article', ['article' => $ article]);