Передача параметра в каждый столбец данных

В моем приложении 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 в документации, чтобы увидеть, как управлять областями анонимных функций:

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

Другие вопросы по тегам