Amir fazel
4 سال پیش توسط Amir fazel مطرح شد
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)
باید کدها را تغییر دهم؟
ممنون می شویم راهنمایی کنید


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

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


Amir fazel
@fazel1amir2 4 سال پیش مطرح شد
0

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

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
@fazel1amir2 4 سال پیش مطرح شد
0

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

public function single(Product $product)

    {
        return $Product;
    }

سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
0

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

<a href="{{ $product->path }}">لینک محصول</a>

Amir fazel
@fazel1amir2 4 سال پیش مطرح شد
1

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

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

ممنون


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

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

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

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


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

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