This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Alexander M. Turek b77ef9f5b9 feature #38846 [Messenger] Make all the dependencies of AmazonSqsTransport injectable (jacekwilczynski)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[Messenger] Make all the dependencies of AmazonSqsTransport injectable

| Q             | A
| ------------- | ---
| Branch?       | 5.x for features
| Bug fix?      | no
| New feature?  | yes - updated changelog
| Deprecations? | no
| Tickets       | Fix #38640
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

This is a pure refactoring PR that enables more flexibility with service injection without actually changing any behaviour or breaking backwards compatibility. It satisfies only 1 of 2 acceptance criteria of #38640 but since they're independent, I'm not marking the PR as WIP.

## Receiver & sender injection into AmazonSqsTransport
It is now possible to inject your own receiver and sender into `Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsTransport`.

### Recommended way - AmazonSqsTransport::create
For clean dependency injection, I recommed using the `create` static method, which obliges you to pass all dependencies:
```php
$transport = AmazonSqsTransport::create($connection, $receiver, $sender);
```

For example, this code from `Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsTransportFactory`:
```php
return new AmazonSqsTransport(Connection::fromDsn($dsn, $options), $serializer);
```
could be replaced with this:
```php
$connection = Connection::fromDsn($dsn, $options);

return AmazonSqsTransport::create(
    $connection,
    new AmazonSqsReceiver($connection, $serializer),
    new AmazonSqsSender($connection, $serializer)
);
```
I didn't replace that code in the factory because I didn't find it essential but I will certainly do it in my custom factory in my project, passing my own receiver implementation.

### Using the main constructor
You can still use the main constructor but it's most suited for backwards compatibility, i.e. when you don't want to inject a receiver or a sender. With the full list of arguments it gets a bit messy due to their optionality.

#### Minimal call
```php
new AmazonSqsTransport($connection);
```
As before this PR, a receiver and a sender will be created using the default serializer, i.e. `Symfony\Component\Messenger\Transport\Serialization\PhpSerializer`.

#### With a custom serializer
```php
new AmazonSqsTransport($connection, $serializer);
```
As before this PR, a receiver and a sender will be created using the passed serializer.

#### With a custom receiver and sender
```php
new AmazonSqsTransport($connection, null, $receiver, $sender);
```
The injected services will be used. The second parameter (serializer) is unnecessary because it was only ever used while creating a receiver and a sender inside the transport. Because of this, I recommend using the new static `create` method.

Commits
-------

281af262e6 [Messenger] Make all the dependencies of AmazonSqsTransport injectable
2020-11-15 23:33:08 +01:00
.github Merge branch '5.1' into 5.x 2020-11-02 16:47:15 +01:00
src/Symfony [Messenger] Make all the dependencies of AmazonSqsTransport injectable 2020-11-15 23:32:40 +01:00
.appveyor.yml Merge branch '4.4' into 5.1 2020-11-02 16:45:32 +01:00
.editorconfig Update .editorconfig 2018-09-06 16:22:56 +02:00
.gitignore Run the phpunit-bridge from a PR 2019-08-02 17:46:19 +02:00
.php_cs.dist Merge branch '5.1' into 5.x 2020-10-28 22:46:03 +01:00
.travis.yml Merge branch '4.4' into 5.1 2020-11-03 12:59:17 +01:00
CHANGELOG-5.0.md Merge branch '5.0' into 5.1 2020-06-15 13:50:15 +02:00
CHANGELOG-5.1.md Update CHANGELOG for 5.1.8 2020-10-28 06:55:13 +01:00
CHANGELOG-5.2.md Update CHANGELOG for 5.2.0-RC1 2020-11-10 08:54:29 +01:00
CODE_OF_CONDUCT.md Added the Code of Conduct file 2018-10-10 03:13:30 -07:00
composer.json [Messenger][SQS] Make sure one can enable debug logs 2020-11-11 14:16:39 +01:00
CONTRIBUTING.md Mention the community review guide 2016-12-18 22:02:35 +01:00
CONTRIBUTORS.md Update CONTRIBUTORS for 3.4.46 2020-10-28 06:38:46 +01:00
LICENSE Update year in license files 2020-01-01 12:03:25 +01:00
link Merge branch '3.4' into 4.4 2020-08-26 10:30:46 +02:00
phpunit Simplify phpunit script. 2020-10-28 21:38:43 +01:00
phpunit.xml.dist [Uid] minor improvements 2020-03-20 20:42:05 +01:00
README.md Minor improvement 2020-07-29 07:57:47 +02:00
UPGRADE-5.0.md Typo: somes styles fixed 2020-08-06 09:00:23 +02:00
UPGRADE-5.1.md Update UPGRADE-5.1.md 2020-09-07 01:58:27 +02:00
UPGRADE-5.2.md [Validator] Allow load mappings from attributes without doctrine/annotations. 2020-11-07 22:48:53 +01:00
UPGRADE-6.0.md [Validator] Allow load mappings from attributes without doctrine/annotations. 2020-11-07 22:48:53 +01:00

Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popular PHP projects (including Drupal and Magento).

Installation

Documentation

Community

Contributing

Symfony is an Open Source, community-driven project with thousands of contributors. Join them contributing code or contributing documentation.

Security Issues

If you discover a security vulnerability within Symfony, please follow our disclosure procedure.

About Us

Symfony development is sponsored by SensioLabs, led by the Symfony Core Team and supported by Symfony contributors.