将参数传递到数据表的每一列

时间:2018-12-05 17:53:18

标签: laravel datatable laravel-datatables

在Laravel 5.6应用程序中,我尝试将$id变量从路由传递到数据表的每一列。

我的代码:

 public function getVendorslistChange($id){
    try {
        return Datatables::of($this->purchaseRepository->getVendorListData(),$id)
            ->addColumn('action', function ($vendor,$id) {
                return \Form::open(['method' => 'POST', 'action' => ['PurchaseController@postChangeVendor',$id], 'class' => 'form']) . '
                <input type="hidden" name="id" value="' . $vendor->id . '" />
                <input type="submit" name="submit" value="Choose" class="btn center-block" />
                ' . \Form::close();
            })
            ->make(true);
    } catch (\Exception $e) {
        return $this->redirectWithErrors($e);
    }
}

这部分$this->purchaseRepository->getVendorListData()将返回以下内容:

public function getVendorListData(){
    $this->vendors = Vendor::Select(
        array(
            'vendors.id',
            'vendors.company_name'
        ))
        ->where('vendors.company_id',return_company_id())
        ->where('status','Active')->get()
    ;
    return $this->vendors;
}

但是有一个错误提示,$id无法传递给addColumn

  

函数App \ Http \ Controllers \ PurchaseController :: App \ Http \ Controllers {closure}()的参数太少,在/ Applications / XAMPP / xamppfiles / htdocs / laravel-project / american_dunnage / vendor / yajra /中传递了1个参数第64行的laravel-datatables-oracle / src / Utilities / Helper.php,正好是2个

将这样的参数传递到数据表的每一列的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果供应商功能不支持参数,则不应该仅将其添加到供应商功能中。例如,当您调用Datatables::of()时,源代码显示它仅需要一个参数。因此,即使您传递了额外的$id变量,该$id也不会传递给您赋予addColumn()的回调函数。这就是为什么您看到有关传入的参数太少的错误的原因。

https://github.com/yajra/laravel-datatables/blob/8.0/src/DataTables.php#L33

类似的事情可能起作用。请注意,我是如何告诉use$id的回调,而不是尝试将其直接传递给函数调用:

public function getVendorslistChange($id){
    try {
        return Datatables::of($this->purchaseRepository->getVendorListData())
            ->addColumn('action', function ($vendor) use ($id) {
                return \Form::open(['method' => 'POST', 'action' => ['PurchaseController@postChangeVendor',$id], 'class' => 'form']) . '
                <input type="hidden" name="id" value="' . $vendor->id . '" />
                <input type="submit" name="submit" value="Choose" class="btn center-block" />
                ' . \Form::close();
            })
            ->make(true);
    } catch (\Exception $e) {
        return $this->redirectWithErrors($e);
    }
}

在文档中查看示例3,以了解如何管理匿名函数作用域:

http://php.net/manual/en/functions.anonymous.php