brefphp / laravel-bridge

Package to use Laravel on AWS Lambda with Bref
https://bref.sh/docs/frameworks/laravel.html
MIT License
314 stars 63 forks source link

Add default SQS connection and queue #17

Closed i906 closed 1 year ago

i906 commented 3 years ago

Previously, I have to add additional environment variables to get SQS working in my worker.php function.

<?php

use Bref\LaravelBridge\Queue\LaravelSqsHandler;
use Illuminate\Foundation\Application;
use Illuminate\Support\Str;

require __DIR__ . '/../vendor/autoload.php';
/** @var Application $app */
$app = require __DIR__ . '/../bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

$prefix = getenv('SQS_PREFIX');
$suffix = getenv('SQS_SUFFIX');
$queue = getenv('SQS_QUEUE');

$url = filter_var($queue, FILTER_VALIDATE_URL) === false
    ? rtrim($prefix, '/') . '/' . Str::finish($queue, $suffix)
    : $queue;

return $app->makeWith(LaravelSqsHandler::class, [
    'connection' => 'sqs',
    'queue' => $url,
]);

With this PR, my worker.php can look like this:

// worker.php

<?php

require __DIR__ . '/base.php';

return Laravel::make(Bref\LaravelBridge\Queue\LaravelSqsHandler::class);
// base.php

<?php

require __DIR__ . '/../vendor/autoload.php';

use Illuminate\Foundation\Application;

class Laravel {

    public static function make($abstract, array $parameters = [])
    {
        /** @var Application $app */
        $app = require __DIR__ . '/../bootstrap/app.php';

        $kernel = $app->make(\Illuminate\Contracts\Console\Kernel::class);
        $kernel->bootstrap();

        return $app->make($abstract, $parameters);
    }
}
mnapoli commented 1 year ago

Will be covered by https://github.com/brefphp/laravel-bridge/pull/94