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]);