将参数传递给数据表的每一列
Passing parameter to each column of datatable
在我的 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()
将 return 以下内容:
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
。
Too few arguments to function App\Http\Controllers\PurchaseController::App\Http\Controllers{closure}(), 1 passed in /Applications/XAMPP/xamppfiles/htdocs/laravel-project/american_dunnage/vendor/yajra/laravel-datatables-oracle/src/Utilities/Helper.php on line 64 and exactly 2 expected
将这样的参数传递给数据表的每一列的正确方法是什么?
如果供应商功能不支持,您不应该只向供应商功能添加参数。例如,当您调用 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 以了解如何管理匿名函数范围:
在我的 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()
将 return 以下内容:
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
。
Too few arguments to function App\Http\Controllers\PurchaseController::App\Http\Controllers{closure}(), 1 passed in /Applications/XAMPP/xamppfiles/htdocs/laravel-project/american_dunnage/vendor/yajra/laravel-datatables-oracle/src/Utilities/Helper.php on line 64 and exactly 2 expected
将这样的参数传递给数据表的每一列的正确方法是什么?
如果供应商功能不支持,您不应该只向供应商功能添加参数。例如,当您调用 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 以了解如何管理匿名函数范围: