Chapters
40 Chapters
|
4:19:16
|
Login to bookmark this video
-
Course Code
Subscribe to download the code!
Subscribe to download the code!
-
This Video
Subscribe to download the video!
Subscribe to download the video!
-
Subtitles
Subscribe to download the subtitles!
Subscribe to download the subtitles!
-
Course Script
Subscribe to download the script!
Subscribe to download the script!
23.
Service Action Injection
Scroll down to the script below, click on any sentence (including terminal blocks) to jump to that spot in the video!
Subscribe to jump to this part in the video!
Keep on Learning!
If you liked what you've learned so far, dive in! Subscribe to get access to this tutorial plus video, code and script downloads.
This tutorial is built on Symfony 6 but works great on Symfony 7!
What PHP libraries does this tutorial use?
// composer.json
{
"require": {
"php": ">=8.2.0",
"ext-ctype": "*",
"ext-iconv": "*",
"composer/package-versions-deprecated": "^1.11", // 1.11.99.4
"doctrine/doctrine-bundle": "^2.1", // 2.5.5
"doctrine/doctrine-migrations-bundle": "^3.0", // 3.2.1
"doctrine/orm": "^2.7", // 2.10.4
"easycorp/easyadmin-bundle": "^4.0", // v4.0.2
"handcraftedinthealps/goodby-csv": "^1.4", // 1.4.0
"knplabs/knp-markdown-bundle": "dev-symfony6", // dev-symfony6
"knplabs/knp-time-bundle": "^1.11", // 1.17.0
"sensio/framework-extra-bundle": "^6.0", // v6.2.5
"stof/doctrine-extensions-bundle": "^1.4", // v1.7.0
"symfony/asset": "6.0.*", // v6.0.1
"symfony/console": "6.0.*", // v6.0.2
"symfony/dotenv": "6.0.*", // v6.0.2
"symfony/flex": "^2.0.0", // v2.4.5
"symfony/framework-bundle": "6.0.*", // v6.0.2
"symfony/mime": "6.0.*", // v6.0.2
"symfony/monolog-bundle": "^3.0", // v3.7.1
"symfony/runtime": "6.0.*", // v6.0.0
"symfony/security-bundle": "6.0.*", // v6.0.2
"symfony/stopwatch": "6.0.*", // v6.0.0
"symfony/twig-bundle": "6.0.*", // v6.0.1
"symfony/ux-chartjs": "^2.0", // v2.0.1
"symfony/webpack-encore-bundle": "^1.7", // v1.13.2
"symfony/yaml": "6.0.*", // v6.0.2
"twig/extra-bundle": "^2.12|^3.0", // v3.3.7
"twig/twig": "^2.12|^3.0" // v3.3.7
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.3", // 3.4.1
"symfony/debug-bundle": "6.0.*", // v6.0.2
"symfony/maker-bundle": "^1.15", // v1.36.4
"symfony/var-dumper": "6.0.*", // v6.0.2
"symfony/web-profiler-bundle": "6.0.*", // v6.0.2
"zenstruck/foundry": "^1.1" // v1.16.0
}
}
4 Comments
I know you use that trick a lot, but for me
assert(null === 'test');doesn't throw an exception.Your statement might be misleading.
In fact, I think it will not throw an exception in most cases. I use
assert()when I want my IDE to know what I expect when I can't use type hints.See https://www.php.net/manual/en/function.assert.php
Hey Julien,
Hm, the
assert(null !== $chartBuilder)should throwAssertionErrorwhen$chartBuilder = null, see https://3v4l.org/s8TRLThe same is true for your example with
assert(null === 'test'). I'm not sure why it's not throwing an exception for you, probably something is changed in thephp.ini? What version of PHP do you have? The default PHP config should throw an exception, and if you don't see it, here're some possible reasons why:zend.assertionsdirective set to 0 inphp.ini), then allassert()calls are ignored, and noAssertionErrorwill be thrown.assert_options()function. If the settingASSERT_ACTIVEis set to false, assertions are ignored. Check if assert options are set to their default values.AssertionErroreven if it's thrown.Cheers!
I have a kind of question. How about the Required attribute?
Personally, I prefer that way to inject services.
Pros:
Cons:
Have you other thoughts about DI via ctor arguments vs Required attribute?
Hey Yaroslavche,
Interesting idea, though as you said it's public property so it cannot be read-only and probably violates some SOLID principles. Also, in case you inject it directly into the method name - it's a method dependency. But if you make it a property - it probably would mean it's a class dependency now, so it seems you increase its scope.
But in general, it is just a matter of taste and mostly depends on the specific use case. :)
Cheers!
"Houston: no signs of life"
Start the conversation!