If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeThe next recipe on our list is symfony/mailer
... which is an especially interesting one because, until Symfony 4.4, symfony/mailer
was marked as "experimental". That means that there are some backwards-compatibility breaks between Symfony 4.3 and 4.4. The recipe update might help us find out about a few of these.
Run:
composer recipes symfony/mailer
Then copy the recipes:install
command and run it:
composer recipes:install symfony/mailer --force -v
According to the output, this only touched one file. Let's see for sure. Run:
git status
Yep! Only .env
was changed. Run:
git add -p
Hmm. It looks like it removed two comment lines, which mention that the MAILER_DSN
for the null
transport looks different in Symfony 4.4. And then it added an example of using the smtp
transport. The top line is my custom code.
I don't really want these changes. I mean, I do still want to define a MAILER_DSN
environment variable and I do still want to use the null
transport. Except... the removed note did just remind me about a syntax change in the null
transport for Symfony 4.4.
Hit "n" to not add this change... for now. Then hit "y" for the symfony.lock
update.
Let's see how things look:
git status
Undo the changes:
git checkout .env
Open .env
in our editor... and find the "mailer" section:
... lines 1 - 37 | |
###> symfony/mailer ### | |
MAILER_DSN=smtp://null | |
# in Symfony 4.4 and higher, the syntax is | |
# MAILER_DSN=null://default | |
### | |
... lines 43 - 62 |
Even though we didn't accept the new recipe changes, we do need to update our syntax. Copy the example and paste. Actually, the default
part can be anything - you'll sometimes see null
:
... lines 1 - 37 | |
###> symfony/mailer ### | |
MAILER_DSN=null://null | |
# in Symfony 4.4 and higher, the syntax is | |
# MAILER_DSN=null://default | |
### | |
... lines 43 - 61 |
And now if you wanted to delete the extra comments about Symfony 4.4, you totally could... and probably should.
So... we basically didn't use anything from the updated recipe, but it did remind us of a change we needed to make.
And because symfony/mailer
may have other backwards-compatibility breaks, it's not a bad idea to check its CHANGELOG. I'll go to https://github.com/symfony/mailer... and click to see it. Yep! You can see info about the null
change and a few others. We'll see one of these later.
Back at your terminal, run:
composer recipes
again. There's one other recipe that's relevant to symfony/mailer. It's symfony/sendgrid-mailer
: a package that helps us send emails through SendGrid. Let's skip straight to updating this:
composer recipes:install symfony/sendgrid-mailer --force -v
And then step through the changes with:
git add -p
The first change is inside .env
. Oh! Ha! That's the change we made, I forgot to add it. Hit "y" to add it now.
The other change is also in .env
: it changed the MAILER_DSN
example from something starting with smtp://
to sendgrid://
. Similar to the null
transport situation, symfony/mailer
4.4 also changed the syntax for a few other transports.
I'm going to say "y" to accept this change: both the old and new code were just examples anyway.
But, there is one other spot you need to check: we need to see if we're using the old format in the .env.local
file. Go open that up. In this project, nope! I'm not overriding that. If we did have smtp://sendgrid
in any env files, or configured as a real environment variable, maybe on production, that would need to be updated.
For the last change - to symfony.lock
- hit "y" to add it. Run:
git status
to make sure we're not missing anything. Looks good! Commit!
git commit -m "updating symfony/mailer recipe packages"
Done! We're down to the last few recipe updates. Let's crush them.
"Houston: no signs of life"
Start the conversation!
// composer.json
{
"require": {
"php": "^7.3.0",
"ext-iconv": "*",
"antishov/doctrine-extensions-bundle": "^1.4", // v1.4.2
"aws/aws-sdk-php": "^3.87", // 3.110.11
"composer/package-versions-deprecated": "^1.11", // 1.11.99
"doctrine/doctrine-bundle": "^2.0", // 2.0.6
"doctrine/doctrine-migrations-bundle": "^1.3|^2.0", // 2.1.2
"doctrine/orm": "^2.5.11", // v2.7.2
"doctrine/persistence": "^1.3.7", // 1.3.8
"easycorp/easy-log-handler": "^1.0", // v1.0.9
"http-interop/http-factory-guzzle": "^1.0", // 1.0.0
"knplabs/knp-markdown-bundle": "^1.7", // 1.8.1
"knplabs/knp-paginator-bundle": "^5.0", // v5.0.0
"knplabs/knp-snappy-bundle": "^1.6", // v1.7.0
"knplabs/knp-time-bundle": "^1.8", // v1.11.0
"league/flysystem-aws-s3-v3": "^1.0", // 1.0.23
"league/flysystem-cached-adapter": "^1.0", // 1.0.9
"league/html-to-markdown": "^4.8", // 4.8.2
"liip/imagine-bundle": "^2.1", // 2.3.0
"nexylan/slack-bundle": "^2.1", // v2.2.1
"oneup/flysystem-bundle": "^3.0", // 3.3.0
"php-http/guzzle6-adapter": "^2.0", // v2.0.1
"sensio/framework-extra-bundle": "^5.1", // v5.5.3
"symfony/asset": "5.0.*", // v5.0.2
"symfony/console": "5.0.*", // v5.0.2
"symfony/dotenv": "5.0.*", // v5.0.2
"symfony/flex": "^1.0", // v1.17.6
"symfony/form": "5.0.*", // v5.0.2
"symfony/framework-bundle": "5.0.*", // v5.0.2
"symfony/mailer": "5.0.*", // v5.0.2
"symfony/messenger": "5.0.*", // v5.0.2
"symfony/monolog-bundle": "^3.5", // v3.5.0
"symfony/security-bundle": "5.0.*", // v5.0.2
"symfony/sendgrid-mailer": "5.0.*", // v5.0.2
"symfony/serializer-pack": "^1.0", // v1.0.2
"symfony/twig-bundle": "5.0.*", // v5.0.2
"symfony/twig-pack": "^1.0", // v1.0.0
"symfony/validator": "5.0.*", // v5.0.2
"symfony/webpack-encore-bundle": "^1.4", // v1.7.2
"symfony/yaml": "5.0.*", // v5.0.2
"twig/cssinliner-extra": "^2.12", // v2.12.0
"twig/extensions": "^1.5", // v1.5.4
"twig/inky-extra": "^2.12" // v2.12.0
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.0", // 3.3.0
"fzaninotto/faker": "^1.7", // v1.8.0
"symfony/browser-kit": "5.0.*", // v5.0.2
"symfony/debug-bundle": "5.0.*", // v5.0.2
"symfony/maker-bundle": "^1.0", // v1.14.3
"symfony/phpunit-bridge": "5.0.*", // v5.0.2
"symfony/profiler-pack": "^1.0", // v1.0.4
"symfony/var-dumper": "5.0.*" // v5.0.2
}
}