在laravel的show函数中,在我的控制器中,我希望获取当我浏览它时显示在浏览器中的ID,像这样
http://localhost:8000/admin/invoices/1
我想获得“ 1”并在如下所示的show controller中使用它
public function show(Invoice $invoice)
{
$clients = Invoice::with('user','products')->get();
$invoice_id = 1;
$invoices = Invoice::with('products')->where('id', '=', $invoice_id)->firstOrFail();
return view('admin.invoices.show', compact('invoice','invoices'),compact('clients'));
}
并放置它而不是$ invoice_id,因此当我的每个客户访问此页面时,只会看到相关的发票产品。谢谢你的帮助
答案 0 :(得分:2)
如果实际上是将Invoice
的实例传递给show
方法,则可能意味着您已经为项目设置了Route-Model Binding。 Laravel正在查看已定义的路由,并确定ID部分(1
)应该映射到Invoice
的实例,并正在为您从数据库中获取记录。
传递的Invoice
对象应该引用ID为1
的数据库中的一个项目,因此,只需执行以下操作即可获取映射到路由中的ID:
public function show(Invoice $invoice)
{
echo $invoice->id; // This should be 1
如今,Laravel开箱即用地支持路由模型绑定,但是在早期版本中,您必须在app/Providers/RouteServiceProvider.php
中进行设置。如果您不想要它,请尝试使用以下方法替换您的show
方法签名:
public function show($id)
{
echo $id; // Should be 1
通过删除类型提示,您只是希望在route参数中给出的值,而Laravel不会尝试为您从数据库中解析它。
答案 1 :(得分:0)
尝试使用$invoiceId
public function show(Invoice $invoice, $invoiceId)
{
$clients = Invoice::with('user','products')->get();
$invoices = Invoice::with('products')->findOrFail($invoiceId);
return view('admin.invoices.show', compact('invoice','invoices'),compact('clients'));
}
答案 2 :(得分:0)
您可以尝试此简单方法。
//Define query string in route
Route::get('admin/invoice/{id}','ControllerName@show')
//Get `id` in show function
public function show(Invoice $invoice,$id)
{
$invoice_id = $id;
}
答案 3 :(得分:0)
如果要在控制器中获取url段,请执行此操作。
$invoice_id = request()->segment(3);
如果您要查看此视图
{{ Request::segment(3) }}
祝你好运!
答案 4 :(得分:0)
通常给出与控制器名称不同的路由名称
示例:
Route::resource('xyzs', 'AbcController');
预期:
Route::resource('abcs', 'AbcController');