在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个
将这样的参数传递到数据表的每一列的正确方法是什么?
答案 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,以了解如何管理匿名函数作用域: