如何在laravel的url中隐藏id



我正在Laravel创建电子商务网站,我想在url中隐藏productdetails id。我可以在代码plz中更改什么需要解决方案。

Web.php

Route::get('/productdetail{id}','ProductDetailController@display_products_details');

控制器代码:

public function display_products_details($id)
{
$data = DB::select('select * from subcategory inner join product_details on subcategory.sub_id=product_details.sub_id where product_details.sub_id = ?',[$id]);
return view('productdetails',['data'=>$data]);
}

链接标签代码:

<a href="/productdetail{{ $value->sub_id }}">{{ $value->name_of_subcategory }}</a>

我得到的路径:localhost:8000/productdetail12

但实际上我想要Localhost:8000/productdetail

您可以通过将id作为请求主体的一部分来实现这一点,这样它就不会在URL中可见(任何通过浏览器开发工具检查请求主体的人仍然可以看到它(。

你可以通过使用一个表格发送一个帖子请求来做到这一点:

Route::post('/productdetail','ProductDetailController@display_products_details');

链接将更改为一种形式:

<form method="POST" action="{{ action('ProductDetailController@display_products_details') }}>
@csrf
<input type="hidden" name="id" value="{{  $value->sub_id  }}" />
<button type="submit">{{ $value->name_of_subcategory }}</button>
</form>

您可能需要将按钮设置为类似链接的样式。

控制器变为:

public function display_products_details(Request $request)
{
$request->validate([ 'id' => 'required|int' ]);
$id = $request->input('id');
$data = DB::select('select * from subcategory inner join product_details on subcategory.sub_id=product_details.sub_id where product_details.sub_id = ?',[$id]);
return view('productdetails',['data'=>$data]);
}

请注意,虽然这在理论上是可能的,但它确实会导致非常糟糕的用户体验。人们不能与他人共享产品链接,例如

最新更新