如何从资源控制器传递 id 以查看 laravel 8

how to pass id from Resources controller to view laravel 8

你好,我想将 id 传递给我的视图 如果我尝试这样做,我会得到这些项目,但我不能对动态项目进行硬编码,

public function getDescription(Marketplace $id)
{
    $product = Marketplace::find(17);
    return view('market.description', compact('product'));
}

但是这个return这个错误属性[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);

您没有为执行该操作的路由定义路由参数,因此 $idMarketplace 模型的一个新的不存在的实例。它不是标识符,因为没有路由参数。

当您将 Marketplace 的那个不存在的实例(新实例)传递给 Marketplace::find($id) 时,那个实例是 Arrayable 所以 toArray 被调用到 return attributes/relationships。因为它是新的,所以它没有任何属性,最终成为一个空数组。这将导致空集合被 returned。

目前您无法将您想要的记录实际传递到您的视图,因为您没有为其定义路由参数。如果你定义了一个路由参数,你可以使用类似路由模型绑定的东西来自动为你找到记录:

Route::get('market/{marketplace}/product-description', [MarketPlacesController::class, 'getDescription']);

public function getDescription(Marketplace $marketplace)
{
    return view('market.description', ['product' => $marketplace]);
}

假设 Marketplace 是一个 Eloquent 模型