php - Laravel 5.6 ErrorException 试图获取非对象的属性“slug”
问题描述
我收到错误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');
如您所见,我没有使用默认的 CRUD 资源 URL,而是定义了自己的 URL 以进入特定的 CRUD 操作。我也尝试将 $product->slug 更改为 $product->id 但结果相同,我得到了那个错误。
我在这里缺少什么?顺便说一句,我是 Laravel 的新手。
提前致谢。
解决方案
如果要使用路由模型绑定,则必须将路由参数名称与方法参数匹配(或使用显式绑定)
改变这个:
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);
}
推荐阅读
- linux - Find 在我使用 {} 时创建一个文件
- javascript - 在js中检测移动设备上的VH并返回它的当前值
- c# - 字符串格式的 RSA 公钥和私钥
- wordpress - 从购物车元存储 WP 变量(Woocommerce)
- java - 在 Java 中具有相对相同性能的并行和单线程代码
- cors - Microsoft Edge 和 EventSource 的 CORS 无效
- azure - 带有 Cosmos DB 输出本地开发主机失败的 Azure HTTP 函数触发器 2.x
- android - Android kotlin - 辅助构造函数
- c - 取消引用 void**-casted type** 会破坏严格的别名吗?
- java - SharedPreferences:放置默认值或删除键?