<template>
<div class="container">
<h2>Create Word File in Laravel</h2><br/>
<form ref="form" @submit.prevent="onSubmit">
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Name">Name:</label>
<input type="text" v-model="name" class="form-control" name="name">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Email">Email:</label>
<input v-model="email" type="text" class="form-control" name="email">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Number">Phone Number:</label>
<input type="text" v-model="number" class="form-control" name="number">
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<label for="Address">Address:</label>
<textarea v-model="address" class="form-control" name="address"/>
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
<button type="submit" :disabled="isDisabled" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
</template>
<script>
export default {
data() {
return {
name: '',
email: '',
number: '',
address: '',
isDisabled: false
}
},
methods: {
onSubmit() {
var vm = this
var formdata = new FormData(vm.$refs.form);
vm.isDisabled = true
axios.post('/api/documents', formdata, {responseType: 'blob'}).then(function (response) {
var headers = response.headers;
console.log(headers)
var blob = new Blob([response.data], {type: headers['content-type']});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = vm.name;
link.click();
link.remove()
vm.isDisabled = false
}).catch(error => {
if(error){
vm.isDisabled = false
}
})
}
}
}
</script>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DocumentController extends Controller
{
public function store(Request $request)
{
$my_template = new \PhpOffice\PhpWord\TemplateProcessor(storage_path('template.docx'));
$my_template->setValue('name',$request->name);
$my_template->setValue('email', $request->email);
$my_template->setValue('number', $request->number);
$my_template->setValue('address',$request->address);
try{
$my_template->saveAs(storage_path($request->email . '.docx'));
}catch (Exception $e){
//handle exception
}
return response()->download(storage_path($request->email . '.docx'));
}
}
Route::post('documents',[DocumentController::class, 'store']);
No comments:
Post a Comment