سلام و وقت بخیر
من قبلا توی ورژن 5.7 لاراول به این صورت توی کنترولر مدل را وصل کرده بودم:
public function single(Product $product)
{
///////
}
و به درستی کار می کرد به تازگی لاراول را آبدیت کردم حالا دیگه اون قسمت 404 not found می شود
ولی به این صورت قرار می دهم بالا می آید ولی ارور می دهد: (public function single($product
ErrorException (E_NOTICE)
Trying to get property 'title' of non-object
حالا دقیقا نمی دونم لاراول توی ورژن جدیدتر به این صورت مشکل دارد؟ public function single(Product $product)
باید کدها را تغییر دهم؟
ممنون می شویم راهنمایی کنید
شما از route model biding استفاده کردید ؟ به چه شکلی از اون بهره بردید ؟ کدشو بفرستید لطفا
از روت
بله
این روت هست
Route::get('/product/{product}', 'ProductController@single')->name('product');
این مدل هست:
<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;
class Product extends Model
{
protected $fillable = [
'user_id',
'category_id',
'title',
'slug',
'author',
'abstract',
'body',
'details',
'contents',
'price',
'image',
'link',
'preview',
'type',
'tags'
];
public function path()
{
return "/product/$this->slug";
}
public function user()
{
return $this->belongsTo(User::class);
}
public function categories()
{
return $this->belongsTo(Category::class);
}
}
و این هم کنترلور:
public function single(Product $product)
{
$findCategory = Category::where('id', $product->category_id)->first();
$sameCategories = Product::where('category_id', $product->category_id)->latest()->paginate(10);
return view('products.single', compact('product', 'sameCategories', 'findCategory'));
}
اینو تست گرفتم که باز not found شد:
public function single(Product $product)
{
return $Product;
}
با سلام . @fazel1amir2
شما چطوری روت رو فراخوانی میکنید ؟ پارامتری که صدا میزنید چیه ؟ منظورم آدرس هست . مثلا میخواین روی یک لینکی کلیک کنید که بره به صفحه محصول. اومدین توی ویو اینطوری لینکو تعریف کردین ؟
<a href="{{ $product->path }}">لینک محصول</a>
سلام مرسی از همه اوکی شد.
من از مدلroute model biding استفاده کرده بودم منتهی یادم رفته بود توی قسمت AppServiceProvider اضافه کنم توی این قسمت توضیح داده شده:
https://roocket.ir/series/laravel-from-scratch/episode/11
ممنون
میتونی توی مدل متد زیر رو override کنی:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
برای استفاده از Route Model Binding حتما نباید چیزی رو داخل Service provider بایند کرد.. البته این هم یه راه هست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟