#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');