首页 > 解决方案 > 将对象发送到控制器中的“显示”方法时的空请求

问题描述

我正在尝试将一个对象发送到该show方法,并且我得到它没有属性。

index.blade.php

<a href="{{ route('admin.specialities.show', [$speciality])}} "> {{$speciality->display_name}}</a>

网页.php

 Route::resource('admin/specialities', 'SpecialtyController', 
   ['names'=> ['index' => 'admin.specialities',                                                                                                                                           
               'show'  => 'admin.specialities.show',]]);

SpecialtyController.php

namespace App\Http\Controllers;

use App\Models\Backend\Specialty;
use Illuminate\Http\Request;

class SpecialtyController extends Controller
{
    public function index() {
        return view('specialities.specialities')
            ->with(['specialities' => Specialty::all()]);
    }


    public function show(Specialty $specialty) {
        dd($specialty); //<- always null atributes
        return view('specialities.show', compact('specialty'));
    }
}

专业.php

namespace App\Models\Backend;

use Illuminate\Database\Eloquent\Model;

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

任何想法可能是错误的或在哪里检查?

标签: laravelrequest

解决方案


您应该id在路线上通过:

<a href="{{ route('admin.specialities.show', $speciality->id)}} "> {{$speciality->display_name}}</a>

在您的控制器中,您可以找到特定的模型:

public function show(id) 
{
    $speciality = Specialty::FindOrFail($id);
    return view('specialities.show', compact('speciality'));
}

将您的索引方法更改为:

public index()
{
    $specialities = Specialty::all();
    return view('specialities.specialities', compact('specialities'));
}

笔记

声明变量时应小心,您有一个名为Specialty的模型,但代表该模型的变量是$speciality


推荐阅读