Morez Dev
Morez Dev

Reputation: 121

laravel 5.7 data not passed to the view

I'm trying to pass my article data to the single page article named article.blade.php although all the data are recorded into the database but when I tried to return them in my view, nothing showed and the [ ] was empty. Nothing returned.

this is my articleController.php

<?php
namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public function single(Article $article)
    {
        return $article;
    }
}

this is my model:

<?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');
    }
}

and this is my Route

Route::get('/articles/{articleSlug}' , 'ArticleController@single');

Upvotes: 3

Views: 246

Answers (3)

Mruf
Mruf

Reputation: 808

Depending on what you try to archive, you need to either ...

return $article->toJson(); // or ->toArray();

.. for json response or ..

return view(..., ['article' => $article])

for passing a the article to a certain view

Upvotes: 1

Davit Zeynalyan
Davit Zeynalyan

Reputation: 8618

Change your code to

class ArticleController extends Controller
{
    public function single(Article $article)
    {
        return view('article', compact('article'));
    }
}

change route to

Route::get('/articles/{article}' , 'ArticleController@single');

And model

public function getRouteKeyName()
{
    return 'slug';
}

See docs https://laravel.com/docs/5.7/routing#route-model-binding

Upvotes: 2

Bharat Geleda
Bharat Geleda

Reputation: 2780

You might not be getting any data because you have not specified that you're using title_slug as the route key for model binding in your model.

Add this to your model class and it should give you the data

public function getRouteKeyName()
{
    return 'slug';
}

Then you can return the data in json, view or other format.

Upvotes: 2

Related Questions