Laravel 5.6 ErrorException Попытка получить свойство 'slug' необъекта - PullRequest
0 голосов
/ 20 мая 2018

Я получаю сообщение об ошибке Trying to get property 'slug' of non-object (View: C:\laragon\www\mides\resources\views\products\edit.blade.php)

В Модель ,

class Product extends Model
{
    // protected $primaryKey = 'slug';

    // public $incrementing = false;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'slug', 'description', 'image', 'user_id',
    ];

    /**
     * Get the route key for the model.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }
}

В Контроллер ,

 public function edit(Product $product)
    {
        $product = Product::where('slug', '=', $product)->first();

        return view('products.edit')->with('product', $product);
    }

public function show(Product $product)
    {
        $product = Product::where('slug', '=', $product)->first();

        return view('products.show')->with('product', $product);
    }

В представлении (edit.blade.php)

<form role="form" method="POST" action="{{ route('products.update', $product->slug) }}">

В маршрутах / web.php,

Route::prefix('/account')->group(function () {
    Route::get('/products', 'AccountController@products');
    Route::get('/add-product', 'ProductController@create');
    Route::get('/edit-product-{slug}', 'ProductController@edit');
    Route::put('/update-{slug}', 'ProductController@update');
});

Route::resource('products', 'ProductController');

Как видите, вместо использования по умолчаниюURL ресурса CRUD, я определяю свой собственный URL, чтобы перейти к конкретному действию CRUD.Я также пытался изменить $ product-> slug на $ product-> id, но результаты такие же, я получил эту ошибку.

Что мне здесь не хватает?Кстати, я новичок в Laravel.

Заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Если вы хотите использовать привязку модели маршрута , вам необходимо сопоставить имя параметра маршрута с аргументом метода (или использовать явное связывание )

Изменить это:

Route::get('/edit-product-{slug}', 'ProductController@edit');

На это:

Route::get('/edit-product-{product}', 'ProductController@edit');

И затем найденный продукт будет передан в метод контроллера, поэтому нет необходимости запрашивать его:

public function edit(Product $product)
{
    return view('products.edit')->with('product', $product);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...