如何在laravel中获取显示功能的当前ID

时间:2018-06-22 08:49:57

标签: php laravel

在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,因此当我的每个客户访问此页面时,只会看到相关的发票产品。谢谢你的帮助

5 个答案:

答案 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');
相关问题