راکت

مشکل با مدل در آپدیت کردن لاراول

6 پاسخ

سلام و وقت بخیر

من قبلا توی ورژن 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)
باید کدها را تغییر دهم؟
ممنون می شویم راهنمایی کنید

Amir fazel
Amir fazel
@fazel1amir2
ثبت پرسش جدید

پاسخ‌ها

6
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

شما از route model biding استفاده کردید ؟ به چه شکلی از اون بهره بردید ؟ کدشو بفرستید لطفا
از روت

Amir fazel
Amir fazel
@fazel1amir2

بله
این روت هست

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

    }

شاید پاسخ شما همین‌جا باشد

Amir fazel
Amir fazel
@fazel1amir2

اینو تست گرفتم که باز not found شد:

public function single(Product $product)

    {
        return $Product;
    }
سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

با سلام . @fazel1amir2
شما چطوری روت رو فراخوانی میکنید ؟ پارامتری که صدا میزنید چیه ؟ منظورم آدرس هست . مثلا میخواین روی یک لینکی کلیک کنید که بره به صفحه محصول. اومدین توی ویو اینطوری لینکو تعریف کردین ؟

<a href="https://roocket.ir/{{ $product->path }}">لینک محصول</a>
Amir fazel
Amir fazel
@fazel1amir2

سلام مرسی از همه اوکی شد.

من از مدلroute model biding استفاده کرده بودم منتهی یادم رفته بود توی قسمت AppServiceProvider اضافه کنم توی این قسمت توضیح داده شده:
https://roocket.ir/series/laravel-from-scratch/episode/11

ممنون

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

میتونی توی مدل متد زیر رو override کنی:

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

برای استفاده از Route Model Binding حتما نباید چیزی رو داخل Service provider بایند کرد.. البته این هم یه راه هست

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام