如何从资源控制器传递 id 来查看 laravel 8
Posted
技术标签:
【中文标题】如何从资源控制器传递 id 来查看 laravel 8【英文标题】:how to pass id from Resources controller to view laravel 8 【发布时间】:2022-01-10 17:57:18 【问题描述】:你好,我想将 id 传递给我的视图 如果我尝试这样做,我会得到项目,但我无法对动态项目进行硬编码,
public function getDescription(Marketplace $id)
$product = Marketplace::find(17);
return view('market.description', compact('product'));
但这会返回此错误 属性 [product_img] 在此集合实例上不存在。 (查看:C:\xampp\htdocs\sellout\resources\views\market\description.blade.php)
public function getDescription(Marketplace $id)
$product = Marketplace::find($id);
return view('market.description', compact('product'));
路线:
Route::get('market/product-description', [MarketsPlaceController::class, 'getDescription']);
Route::post('market/product-description', [MarketsPlaceController::class, 'getDescription'])->name('productDesc');
Route::resource('market', MarketsPlaceController::class);
【问题讨论】:
这是我的路线..... Route::get('market/product-description', [MarketsPlaceController::class, ('getDescription')]); Route::post('market/product-description', [MarketsPlaceController::class, ('getDescription')])->name('productDesc'); Route::resource('market', MarketsPlaceController::class); 【参考方案1】:您没有为执行该操作的路由定义路由参数,因此$id
是Marketplace
模型的一个新的不存在实例。它不是标识符,因为没有路由参数。
当您将Marketplace
的不存在实例(新实例)传递给Marketplace::find($id)
时,该实例为Arrayable
,因此调用toArray
以返回属性/关系。由于它是新的,它没有任何属性,最终成为一个空数组。这将导致返回一个空集合。
目前您无法将所需的记录实际传递给您的视图,因为您没有定义它的路由参数。如果您定义了路由参数,则可以使用类似 Route Model Binding 的方法自动为您查找记录:
Route::get('market/marketplace/product-description', [MarketPlacesController::class, 'getDescription']);
public function getDescription(Marketplace $marketplace)
return view('market.description', ['product' => $marketplace]);
假设 Marketplace
是一个 Eloquent 模型
【讨论】:
谢谢@lagbox,已经尝试过您的建议,它仍然返回页面打开的空数据,我在地址栏上有ID,但没有返回产品的详细信息。谢谢 @Barnabaskoloz 显示您正在使用的路线和 URL 非常感谢,我刚刚检查了路线,发现我没有在我的帖子路线中传递 marketplace 参数。我做到了,而且工作完美,我感谢您的时间和精力 没问题,欢迎采纳以上是关于如何从资源控制器传递 id 来查看 laravel 8的主要内容,如果未能解决你的问题,请参考以下文章
如何将可选 ID 从 Route 传递给 Laravel 控制器?
如何在laravel php中将变量从视图传递到控制器而没有表单