Open Propaganistas opened 8 months ago
Is there some way to add a test for this?
Is there some way to add a test for this?
Not sure. I think you could borrow ideas from framework tests?
https://github.com/laravel/framework/blob/10.x/tests/Queue/QueueWorkerTest.php
Dear contributor,
because this issue seems to be inactive for quite some time now, I've automatically closed it. If you feel this issue deserves some attention from my human colleagues feel free to reopen it.
Time to reopen as still unsolved.
Hi, I'm facing the same problem when generating the PDF under queue. If generate directly (sync), no issues. All defaults defined in app/Providers/AppServiceProvider.php boot().
Hi Same issue here
I just ran into the same problem. The issue shows the same behavior.
Here is some minimal test code:
use Spatie\LaravelPdf\Facades\Pdf;
use Spatie\Browsershot\Browsershot;
Pdf::default()->withBrowsershot(function (Browsershot $browserShot) {
logger('prepare browsershot for pdf generation'); // only logs in sync context, never in a async job
});
It appears there is a resolution issue with the Facade or the Pdf::default()
call, which returns a new instance of PdfFactory
in queued jobs on each call. I am unsure of the exact cause.
As a workaround, I am registering the PdfBuilder
manually and resolving it from the container when needed:
class PdfServiceProvider extends ServiceProvider
{
#[Override]
public function register(): void
{
$this->app->bind(PdfBuilder::class, function () {
return (new PdfBuilder())->withBrowsershot(function (Browsershot $browsershot) {
// Apply customizations to Browsershot
return $browsershot;
});
});
}
}
Then, I resolve the PdfBuilder
like this:
$pdfBuilder = resolve(PdfBuilder::class); // Or inject it via constructor or method
$builder = $pdfBuilder->view($contextData->viewName, ['contextData' => $contextData])
->format(Format::A4)
->portrait()
->save($fileName);
What happened?
I've set defaults for the PdfBuilder in a service provider's
boot()
method as described in the docs.When a PDF gets generated in a queued job:
queue:listen
queue:work
How to reproduce the bug
database
and publish the jobs tableboot()
(e.g.Pdf::default()->margin(0.4, 0.4, 0.4, 0.4, Unit::Inch)
Pdf::view('welcome')->save('somewhere')
)queue:work
Or temporarily add a dump statement in PdfBuilder's
view()
method to check themargins
property and return early. You'll notice the margins are set when runningqueue:listen
but remainnull
when runningqueue:work
.Package Version
1.4.0
PHP Version
8.3.3
Laravel Version
10.48.4