Я хочу загрузить файл Excel с помощью уникального идентификатора Checkbox в laravel, я использую Maatwebsite Excel здесь

#laravel #laravel-5 #maatwebsite-excel

#laravel #laravel-5 #maatwebsite-excel

Вопрос:

Мой файл контроллера

 public function enquiryExport($id, Request $request)
{
    $id[] = $request->explode(",",$id);
    return Excel::download(new EnquiryExport($id), 'enquiry.xlsx');
}
  

и мой файл экспорта

  protected $id;
function __construct($id) {
        $this->id = $id;
 }

public function collection()
{
    return Enquiry::whereIn('id',explode(",",$this->id))->get();

   /* return Enquiry::all(); */
}
  

Маршрут похож

  Route::get('enquiryExport', 'enquiryController@enquiryExport');
  

Тем не менее я получаю эту ошибку

 "message": "Too few arguments to function App\Http\Controllers\enquiryController::enquiryExport(), 1 passed and exactly 2 expected",
  

Я использую идентификатор флажка через AJAX здесь.

Комментарии:

1. Ваш контроллер enquiryExport($id, Request $request) ожидает id , что ваш маршрут Route::get('enquiryExport', 'enquiryController@enquiryExport'); не передает никакого идентификатора.

2. Либо обновите свой контроллер значением по умолчанию enquiryExport($id=null, Request $request) , либо обновите свой маршрут id подобным, Route::get('enquiryExport/{id}', 'enquiryController@enquiryExport');

3. Route::get('enquiryExport/{id}', 'enquiryController@enquiryExport'); принять идентификатор из маршрута

Ответ №1:

Проблемы — это ваш Route метод.

Get метод: строка запроса (пары имя / значение) отправляется в URL-адресе запроса GET

Post метод: данные, отправленные на сервер с помощью POST, сохраняются в теле запроса HTTP-запроса

Если вы используете Get метод: попробуйте это (я только что прочитал его, не пробовал)

 Route::get('enquiryExport/{id}', 'enquiryController@enquiryExport')->name('enquiryExport');

<a href="{{ route('enquiryExport', serialize($id)) }}">Submit</a>
  

Если вы используете Post метод: попробуйте это (я привык использовать это)

 Route::post('enquiryExport', 'enquiryController@enquiryExport');

public function enquiryExport(Request $request)
{
    return Excel::download(new EnquiryExport($request->input('id')), 'enquiry.xlsx');
}
  

Вы можете прочитать больше здесь: https://www.w3schools.com/tags/ref_httpmethods.asp

Ответ №2:

Попробуйте это в контроллере:

    public function enquiryExport(Request $request, $id)
   {
     return Excel::download(new EnquiryExport($request->id), ''.date('Y-m-d'). '.xlsx', MaatwebsiteExcelExcel::XLSX);
   }
  

В файле экспорта:

        protected $id;

        function __construct($id) {
            $this->id = $id;
        }
       public function collection()
        {

          return Enquiry::where('id', $this->id)->get();
       }


       public function map($enquiry): array
{
    
    return [
        // $enquiry->WRITE YOUR RECORDS,
        // ...

    ];
}

public function headings(): array
{
    return [
            //NAME HEADINGS(TITLE) OF YOUR RECORDS IN SIDE SINGLE QUOTATION,
            // ...
    ];
}
  

В маршруте:

     Route::get('enquiryExport/{id}', 'enquiryController@enquiryExport');