alexteie's avatar

barryvdh/laravel-dompdf

When i use this package it works perfectly

in all my models or controllers iwth \PDF::bla ;)

but when i use an Job like this?

he cant find de package/class?

modelfile

<?php

namespace PACKAGE\SHOP\Models;

use Illuminate\Database\Eloquent\Model;
use Laratrust\Traits\LaratrustUserTrait;
use Illuminate\Database\Eloquent\SoftDeletes;

use Carbon\Carbon;

use PACKAGE\BASE\Traits\BelongsToTenant;
use PACKAGE\BASE\Traits\Auditable;

use PACKAGE\BASE\Models\Tenant;

class Order extends Model
{

    public static function generatePdfInvoice($id) {
        $invoice = Order::findOrFail($id);
        $tenant = Tenant::findOrFail($invoice->tenant_id);

        $pdf = \PDF::loadview('shop::invoices.pdf.invoice_basic', [
            'invoice'   =>  $invoice,
            'tenant'    =>  $tenant
        ]);

        return $pdf->output();
    }
}

HandleSucceedCharge Job file:

<?php

namespace PACKAGE\SHOP\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;

use Stripe\Charge;
use Stripe\Stripe;
use Spatie\WebhookClient\Models\WebhookCall;
use PACKAGE\SHOP\Mails\newOrderNotification;

use PACKAGE\BASE\Models\Tenant;
use PACKAGE\SHOP\Models\Order;

class HandleSucceededCharge implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $webhookCall;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(WebhookCall $webhookCall)
    {
        $this->webhookCall = $webhookCall;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $Order = Order::whereChargeId($this->webhookCall->payload['data']['object']['id'])->firstOrFail();

        \Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));

        $Order->order_status = 'PAID';
        $Order->payment_status = 'SUCCESS';
        $Order->invoice_number = Order::generateInvoice();
        $Order->UID = $this->webhookCall->payload['data']['object']['payment_method_details']['ideal']['bank'];
        $Order->order_date = date('Y-m-d H:i');
        $Order->save();

        $pdf = Order::generatePdfInvoice($Order->id);

        $Orderitems = $Order->OrderItems();

        Mail::to($Order->email)
            ->bcc(['[email protected]', '[email protected]'])
            ->attachData($pdf, 'faktuur-' . $Order->id . '.pdf')
            ->send(new \PACKAGE\SHOP\Mails\NewOrderNotification($Order, $Orderitems));
    }
}

Laravel logs says this:

[2020-12-08 09:33:38] local.ERROR: Class 'PDF' not found {"exception":"[object] (Error(code: 0): Class 'PDF' not found at /home/xxxx/domains/xxxx/public_html/lbenz/shop/src/Models/Order.php:55)
[stacktrace]
#0 /home/xxxx/domains/xxxxx/public_html/package/shop/src/Jobs/HandleSucceededCharge.php(55): LBenz\SHOP\Models\Order::generatePdfInvoice()

What Goes wrong here?

0 likes
11 replies
Sinnbeck's avatar

Does it work if you load it from the service provider?

$pdf = app('dompdf.wrapper');
$pdf->oadview('shop::invoices.pdf.invoice_basic', [
            'invoice'   =>  $invoice,
            'tenant'    =>  $tenant
        ]);

return $pdf->output();
alexteie's avatar

sinnbeck how do you mean?

that i insert the larave-dompdf class from config/app.php instead of auto discovery?

alexteie's avatar

[2020-12-08 09:49:47] local.ERROR: Class 'PACKAGE\SHOP\Models\App' not found {"exception":"[object] (Error(code: 0): Class 'PACKAGE\SHOP\Models\App' not found at /home/xxxx/domains/xxxx/public_html/package/shop/src/Models/Order.php:55) [stacktrace]

Sinnbeck's avatar

Yeah you need to actually import App :) I updated my example with app() instead

alexteie's avatar

sinnbeck i cant see you example?

$pdf = app('dompdf.wrapper');
$pdf->loadview('shop::invoices.pdf.invoice_basic', [
            'invoice'   =>  $invoice,
            'tenant'    =>  $tenant
        ]);

return $pdf->output();

this return the app not found in my Model file?

Sinnbeck's avatar

That should work. Can you post the exact error?

alexteie's avatar

Sinnbeck

[2020-12-08 10:02:35] local.ERROR: Target class [dompdf.wrapper] does not exist. {"exception":"[object] (Illuminate\Contracts\Container\BindingResolutionException(code: 0): Target class [dompdf.wrapper] does not exist. at /home/mijninfo/domains/mijn.info/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php:832) [stacktrace]

[previous exception] [object] (ReflectionException(code: -1): Class dompdf.wrapper does not exist at /home/mijninfo/domains/mijn.info/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php:830) [stacktrace]

alexteie's avatar

Yes is works in an controller ;) and only fails in an job ;) i have and pdf download controller wich works perfectly without loading something extra ;)

i us the latest laravel 8 version


        $pdf = \PDF::loadview('shop::invoices.pdf.invoice_basic', [
            'invoice'   =>  $invoice,
            'tenant'    =>  $tenant
        ]);

        return $pdf->stream('factuur-' . $invoice->invoice_number . '.pdf');
Sinnbeck's avatar

What do you dispatch your jobs to? Redis? And does it work if the driver is set to sync?

Please or to participate in this conversation.