в фреймворке Laravel я скачал пакет domPDF.Я хотел создать отчет в формате PDF:
- Пользователь отправляет форму
- Данные формы будут проходить по маршруту
Route::post('/customers/pdf', 'AjaxController@export_pdf')->middleware('auth');
- Функция
export_pdf
in AjaxController
получит данные формы и обработает их в базе данных. - После завершения процесса базы данных результат запроса будет передан
mypdf.blade.php
.Пока вывод PDF выполнен успешно, но не может быть объединен с данными формы из внешнего интерфейса.
Ниже приведены коды представлений и контроллера.Заранее спасибо.
web.php
Route::post('/customers/pdf', 'AjaxController@export_pdf')->middleware('auth');
report.blade.php
<form method="post" id="FormReport">
<div class="form-group">
<label class="d-block" for="mobilenumber">Step 1 - Report Type</label>
<div class="input-group">
<div class="input-group-prepend">
<i class="mdi mdi-pencil-outline input-group-text" aria-hidden="true"></i>
</div>
<select class="form-control" id="reporttype" name="reporttype" required>
<option value="" disabled selected></option>
<option value="1">Report A</option>
</select>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group mb-0">
<label class="d-block">Step 2 - Select Dates</label>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="d-block" data-target="#fromdate" data-toggle="datetimepicker">From Date</label>
<div class="input-group">
<div class="input-group-prepend">
<i class="mdi mdi-pencil-outline input-group-text" aria-hidden="true"></i>
</div>
<input type="text" class="form-control datetimepicker-input" id="fromdate" name="fromdate" data-toggle="datetimepicker" data-target="#fromdate" required />
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="d-block" data-target="#todate" data-toggle="datetimepicker">To Date</label>
<div class="input-group">
<div class="input-group-prepend">
<i class="mdi mdi-pencil-outline input-group-text" aria-hidden="true"></i>
</div>
<input type="text" class="form-control datetimepicker-input" id="todate" name="todate" data-toggle="datetimepicker" data-target="#todate" required />
</div>
</div>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success mt-3">Generate</button>
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$('#fromdate, #todate').datetimepicker({
format: 'YYYY-MM-DD'
});
$(document).on('submit', '#FormReport', function(e) {
e.preventDefault();
$('.pre-loader').show();
var form = $(this);
var formData = new FormData(form[0]);
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '/customers/pdf',
type: "POST",
data: formData,
dataType: 'json',
contentType: false,
processData: false,
cache: false,
success: function(data) {
// How should I proceed here?
},
error: function(xhr, ajaxOptions, thrownError) {
console.log('Error', xhr);
},
complete: function(c) {
}
});
});
})
</script>
AjaxController @ export_pdf
public function export_pdf(Request $request)
{
$fromdate = $request->input('fromdate');
$arr_products = $arr_product = array();
try {
$rs_product = DB::select("select a.prod_desc, a.prod_location from product_store a where a.created_date >= ?", [$fromdate]);
$numrow_product = count($rs_product);
if ($numrow_product > 0) {
foreach ($rs_product as $row_product) {
$prod_desc = $row_product->prod_desc;
$prod_location = $row_product->prod_location;
$arr_product['prod_desc'] = $prod_desc;
$arr_product['prod_location'] = $prod_location;
$arr_products[] = $arr_product;
}
}
} catch (\Illuminate\Database\QueryException $ex) {
$this->error['form-message'] = 'ERR' . __LINE__ . ': Report is unavailable';
}
if ($this->error == '') {
$data = ['title' => 'Product In Store', 'productlist' => $arr_products];
/* I think this part has to do with the output of PDF? */
$pdf = PDF::loadView('mypdf', $data);
return $pdf->stream('productinstore_'.date('YmdHis').pdf');
}
}
mypdf.blade.php
@guest
@else
<!DOCTYPE html>
<html>
<head>
<title>{{$title}}</title>
</head>
<body>
<table class="content" width="100%">
<thead>
<tr>
<th>Description</th>
<th>Location</th>
</tr>
</thead>
<tbody>
@foreach ($productlist as $products => $product)
<tr>
<td>{{ $product['proddescription'] }}</td>
<td>{{ $product['prodlocation'] }}</td>
<tr>
@endforeach
</tbody>
</table>
</body>
</html>
@endguest