Передача параметра в каждый столбец данных
В моем приложении 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}(), 1 передано в /Applications/XAMPP/xamppfiles/htdocs/laravel-project/american_dunnage/vendor/yajra/laravel-datatables-oracle/src/Utilities/Helper.php в строке 64 и ожидается ровно 2
Как правильно передать такой параметр в каждый столбец таблицы данных?
1 ответ
Не следует просто добавлять параметры в функции вендора, если они их не поддерживают. Например, когда вы звоните Datatables::of()
Исходный код показывает, что он ожидает только один параметр. Так что, даже если вы передаете дополнительный $id
переменная, что $id
не будет передан в функцию обратного вызова, которую вы даете addColumn()
, Вот почему вы видите эту ошибку, когда передается слишком мало аргументов.
https://github.com/yajra/laravel-datatables/blob/8.0/src/DataTables.php
Нечто подобное может сработать. Обратите внимание, как я говорю обратный вызов 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 в документации, чтобы увидеть, как управлять областями анонимных функций: