Call to undefined function Mpdf\\Mpdf() - laravel-5

I am trying to download a pdf from blade view usign mPDF with laravel, but when I run the code, I get
"message": "Call to undefined function Mpdf\Mpdf()",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",
Does anyone know how to solve this.
I already have mpdf required in my composer
"mpdf/mpdf": "^8.0", ...
EDIT:
public function show(Request $request, Post $post)
{
$this->authorize('view', $post);
if ($request->input('view') === 'pdf') {
$mpdf = \Mpdf\Mpdf();
$html = '<h1>$post->title</h1>';
$mpdf->writeHTML($html);
$mpdf->Output('post.pdf', 'D');
}
return response($post);
}

You need to create an instance of \Mpdf\Mpdf() using the new keyword. Try if that works for you.
$mpdf = new \Mpdf\Mpdf();

Since you are mpdf 8 version,
$mpdf = new mpdf();
$mpdf->SetHTMLHeader($this->headernew(),'1', true);
// $mpdf->SetHTMLFooter($this->footer());
$mpdf->AddPage('p','','','','',10,10,37,20,10,10);
$mpdf->WriteHTML($html);
$mpdf->Output();

Related

Laravel 5.8 voyager translator not working when paginated

When I use without paginate, the Voyager Translatable trait works fine.
$data = Post::where('status', 1)->get()->translate();
But, when I change it to paginate:
$data = Post::where('status', 1)->paginate(15)->translate();
in view:
$data->links()
then it gives an error in blade view:
Method TCG\Voyager\Translator\Collection::links does not exist
How can I solve this issue?
i did it that:
public function getTranslated(Builder $query, string $lang) : array {
$data = $query->paginate();
$dataArray = $data->toArray();
$translatedData = $data->translate($lang);
$dataArray['data'] = $translatedData->toArray();
return $dataArray;
}

how to save pdf inside controller and pass pdf patch

pdf api -> https://github.com/barryvdh/laravel-dompdf
I create some simple API, everyone who pass some data will recaive link to pdf file.
The thing is, i dont know how to save pdf after conroller make changes inside my blade template.
so...
i already try changing data by request and that was working.
something like :
class pdfGenerator extends Controller
{
public function show(Request $request)
{
$data = $request->json()->all();
return view('test2', compact('data'));
}
}
that work well, also pdf creator works well from web.php
Route::get('/test', function () {
$pdf = PDF::loadView('test2');
return $pdf->download('test2.pdf');
});
that one just download my pdf file as expected.
but, now i try to pust some changes from request and save file but... without efford... any idea?
My code after tray to save content
class pdfGenerator extends Controller
{
public function show(Request $request)
{
$data = $request->json()->all();
return $pdf = PDF::loadView('test2', compact('data'))->save('/pdf_saved/my_test_file.pdf');
}
}
But i get only some errors. Please help :D
How can I save a PDF inside my controller and pass the PDF patch?
$data = $request->json()->all();
$pdf = app('dompdf.wrapper');
$pdf->loadView('test2', $data);
return $pdf->download('test2.pdf');

how to use $request->all() on controller and blade view in laravel 5.5

in Controller
public function index(Request $request)
{
$search_cons = $request->all();
$search_con = $search_cons->name; //error place
return $search_cons.$search_con;
}
->name this place has the error
Trying to get property of non-object
Or in blade.view
<p>{{$search_cons->name}}</p> has the error
Trying to get property of non-object
But if I use
$search_cons=$request->input('name');
on controller
the blade view
<p>{{$search_cons}}</p> will work ok!
I want the $search=request->all() so I can freely use $search->name on my blade view
How can I fix the question?
PS: I tried $resquest('name') still not to work
Request::all() ->tell me the
When you do $request->all() it returns all the inputs submitted in array format. So in your case, you can do
$search_cons = $request->all(); // dd($search_cons) so you can see its structure
$search_con = $search_cons['name']; // instead of ->name since it's not an object anymore
And anyway, you can skip the $request->all() thing - you can actually just do this directly:
$request->name.
EDIT:
You can cast the array as an object using (object)
$search_cons = (object) $request->all();
this will still let you use $search_cons->name
$search_cons is an array, not an object:
$search_con = $search_cons['name']
public function index(Request $request)
{
$search_cons = $request->all(); //returns array
$search_con = $search_cons['name']; //error place
return $search_cons.$search_con;
}
Or you can do like this
request()->name //request() isa global helper function
Try
In Controller
public function index(Request $request)
{
$search = $request->all();
return ['search' => $search];
}
In Blade
<p>Name : {{$search['name'] ? $search['name'] : ''}} </p>

Passing variable from DOMPDF controller to view

I want create a DOMPDF with laravel, and I must passing my variable to view. I've been try passing variable like below, but it still not working yet.
here my Laravel Controller
public function pdf(Request $request, $id){
$salesorder = $this->show($id)->salesorder;
$detailservice = $this->show($id)->detailservice;
$detailemployee = $this->show($id)->detailemployee;
$data = [$salesorder, $detailemployee, $detailservice];
$pdf = PDF::loadView('summary.invoice', $data);
return $pdf->download('invoice.pdf');
}
the error on my view is :
Undefined variable: salesorder
How to passing some variable from Laravel controller to DOMPDF ?
PS : dd($data) result is correctly
You have to pass the data as below
$data = [
'salesorder' => $salesorder,
'detailemployee' => $detailemployee,
'detailservice' => $detailservice
];
or try using compact
$data = compact('salesorder', 'detailemployee', 'detailservice');
You may try this following
public function pdf(Request $request, $id){
$salesorder = $this->show($id)->salesorder;
$detailservice = $this->show($id)->detailservice;
$detailemployee = $this->show($id)->detailemployee;
$pdf = PDF::loadView('summary.invoice', array('salesorder' => $salesorder,'detailemployee'=>$detailemployee,'detailservice'=>$detailservice));
return $pdf->download('invoice.pdf');
}
You can use library function to do that easily.
$pdf_text = "It will be the text you want to load";
PDF::loadHTML($pdf_text)->save('public/you-file-name.pdf');
You can change the orientation and paper size, and hide or show errors (by default, errors are shown when debug is on)
PDF::loadHTML($pdf_text)->setPaper('a4', 'landscape')->setWarnings(false)->save('public/you-file-name.pdf')
You may try the following.
$html = view('summary.invoice', ['salesorder' => $salesorder, 'detailemployee' => $detailemployee, 'detailservice' => $detailservice])->render();
$pdf = App::make('dompdf.wrapper');
$invPDF = $pdf->loadHTML($html);
return $pdf->download('invoice.pdf');
I know this is old but this may help others. you need to use array key in your view.
Controller:
$data = [
'foo' => $bar,
];
$pdf = PDF::loadView('pdf.document', $data);
return $pdf->stream('doc.pdf');
View:
<p>{{$foo}}</p>

CodeIgniter: My upsert function not working with my_model / my_controller

Working with the my_model & my_controller for the first time this month within CodeIgniter, I think I almost have this working.
I got an insert function working properly, now I'm trying to add an update to it if there is an ID.
Here's my code:
function upsert_client($client_id = 0)
{
load_model('client_model');
$this->insertMethodJS();
$this->fields['client'] = $this->_prototype_client();
$user_id = get_user_id();
$company_id = get_company_id();
if ($client_id)
{
$this->data['client'] = $this->client_model->get_record($client_id);
}
if (!$this->ion_auth->in_group(GROUP_NAME_MANAGER, $user_id))
{
redirect('members/dashboard');
}
if ($_POST)
{
$this->load->helper('string');
if ($this->_validate_client())
{
$fields = $this->input->post(null , TRUE);
$fields['user_id'] = $user_id;
$fields['company_id'] = $company_id;
$fields['active'] = 1;
if ($client_id)
{
$fields['id'] = $this->client_model->get_record($client_id);
unset($fields['billing']);
$this->client_model->update($client_id, $fields);
}
else
{
unset($fields['billing']);
$this->client_model->insert($fields);
redirect('members/clients/manage_clients');
}
}
}
$this->template->write_view('content',$this->base_path.'/'.build_view_path(__METHOD__), $this->data);
$this->template->render();
}
function _prototype_client()
{
$fields = array();
$fields['id'] = 0;
$fields['name'] = '';
return $fields;
}
And from my client_model:
class Client_model extends MY_Model {
function get_record($client_id)
{
$query = $this->db->select('id')
->where(array('id'=>$client_id))
->get('clients');
return $query->row_array();
}
}
Everytime I try to edit a "client", it just inserts a new one... All I'm currently trying to edit is the "name" field.
My edit button:
<td><button class="btn btn-inverse" style="float: right;" type="button">Edit</button></td>
Any help is appreciated, thanks! And let me know if you need any additional details...
I never worked with ion auth in particular but from what I see you have a couple of functions that are not referenced correctly.
load_model('client_model');
//Should be
$this->load->model('client_model');
also a few other functions should be referenced as
$this->function_name();
//Instead of just
function_name();
//Unless they are in another library
$this->lib_name->function_name();
I'm not sure if this well solve your problems but just a few things I noticed.
Your hyperlink points to 'add_client' whereas the function you are showing is called 'upsert' Are you calling the correct URL?

Resources