Chapters
21 Chapters
|
2:23:48
|
Login to bookmark this video
-
Course Code
Login or register to download the code!
Login or register to download the code!
-
This Video
Login or register to download the video!
Login or register to download the video!
-
Subtitles
Login or register to download the subtitles!
Login or register to download the subtitles!
-
Course Script
Login or register to download the script!
Login or register to download the script!
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!
What PHP libraries does this tutorial use?
// composer.json
{
"require": {
"php": ">=8.1",
"ext-ctype": "*",
"ext-iconv": "*",
"symfony/asset": "6.0.*", // v6.0.3
"symfony/console": "6.0.*", // v6.0.3
"symfony/dotenv": "6.0.*", // v6.0.3
"symfony/flex": "^2", // v2.4.5
"symfony/framework-bundle": "6.0.*", // v6.0.4
"symfony/monolog-bundle": "^3.0", // v3.7.1
"symfony/runtime": "6.4.3", // v6.4.3
"symfony/twig-bundle": "6.0.*", // v6.0.3
"symfony/ux-turbo": "^2.0", // v2.0.1
"symfony/webpack-encore-bundle": "^1.13", // v1.13.2
"symfony/yaml": "6.0.*", // v6.0.3
"twig/extra-bundle": "^2.12|^3.0", // v3.3.8
"twig/twig": "^2.12|^3.0" // v3.3.8
},
"require-dev": {
"symfony/debug-bundle": "6.0.*", // v6.0.3
"symfony/stopwatch": "6.0.*", // v6.0.3
"symfony/web-profiler-bundle": "6.0.*" // v6.0.3
}
}
26 Comments
Decided to have a look at the example url for the JSON endpoint...
I'm not even mad
I'm glad you did :D
Same here
This lesson did not work for me as instructed. I needed to add the following in order for it to work.
use Symfony\Component\HttpFoundation\JsonResponse;Thank you once again, I just fixed the code block in the script. Cheers!
Hi,
When I return this json, my browser shows the output in one line. Not line per line as video. Is there any trick to show line by line?
output : {"id":"6","name":"Waterfalls","url":"https:\/\/symfonycasts.s3.amazonaws.com\/sample.mp3"}Hey Mahmut,
Yes, that's a special Chrome extension called JSONVue. If you use Chrome - you can install it to make the same look like in the video :)
Cheers!
I am getting the Json response like this:
{"id":"5","name":"Waterfalls","url":"https:\/\/symfonycasts.s3.amazonaws.com\/sample.mp3"}
Even when I copy and paste entire controller, it doesn't change
Hey @Artun!
Actually, that looks perfect to me! It looks a bit different than what you see in the video because I have a browser plugin that makes it look fancy (my bad - I should have mentioned that). In JSON, having quotes around the keys = like
"id"is correct. In the video, that browser plugin is hiding those quotes to make it look prettier. But your response is exactly what we want :).Cheers!
Hey @weaverryan!
Thanks for your reply.So I am assuming the backslaches in the url is also expected? instead of "https://symfonycasts.s3.amazonaws.com/sample.mp3"
it shows as
"https:\/\/symfonycasts.s3.amazonaws.com\/sample.mp3"
Yes @Artun, the "JSON encode" function takes care of escaping any reserved character, for example, if you have double quotes in your data, those will be escaped too
Cheers!
good Tutorials, I come from Laravel and everything make sense its more lighter then laravel or lumen but when I saw you how you created Controller file I thought there should be easier way something like command "php artisan make:controller" to do, what I found there is "php bin/console make:crontroller" it requires "maker" you should show this too it makes your life easier
Hey Engazan,
Actually, there's an easier way for controller, you need to have Maker bundle installed and then as you said you can call:
To be able to use the Maker bundle (if you don't have one) - first, you need to execute:
We wanted to show the strightforawrd way focusing the attention on no magic, you just need to create a simple PHP class in the specific folder. We will show the way with Maker in future tutorials too. ;)
Cheers!
Hi again, Ryan.
I just ran into another issue, and this time I made sure that the code in my controller doesn't miss anything.
It looks like my Symfony is somehow ignoring the fact that I created a brand-new route, because upon trying to open it in the browser, the framework is throwing a 404 Exception:
No route found for "GET https://127.0.0.1:8000/api/songs/5".Moreover, by issuing the
bin/console debug:routercommand, the new route isn't showing up. Clearing up the caches and restarting the server didn't make any difference either.Here's my
SongControllercode:What's happening? Any ideas?
Thank you so much.
Hey @roenfeldt!
Hmm.
That was a great thing to try for debugging. And while you shouldn't need to clear the cache ever, when you hit a super weird issue it's always a good thing to try as well. So nice job there.
So, why isn't this working? First, remove that line break between the
#[Route]and thepublic function. I don't think that's the issue (I had never tried it before, but having a line break doesn't seem to cause any issues) - but better to remove it. To other things to check, which will sound crazy, but there is very little else that could be going wrong: (A) make sure you have the<?phpat the start of your file (I have seen this many times and it's super hard to debug) and (B) triple-check that you're inside of thesrc/Controller/directory.The mechanism for loading these attribute routes is pretty simple: in your
config/routes.yamldirectory, there is a line there that saysIt's these 3 lines - https://github.com/symfony/recipes/blob/main/symfony/routing/6.1/config/routes.yaml#L1-L3 . So, there's not a lot that can go wrong as long as you have a valid php file in the
src/Controller/directory (and the contents of your class - apart from the potential missing<?phplook perfect).Let me know if any of this helps :).
Cheers!
Hi Ryan,
First off, thank you for the fast reply, and thank you for the very nice explanation!
With the help of your suggestions, I realized that PhpStorm created the file into the wrong folder. My
SongControllerwas created insidesrc/App/Controller. How did that happen? Well, the error was, once again, on the exterior of the screen, of course :)Because I learned my lesson from the previous time (the Controller's namespace was missing the
App\part), in order to prevent that from happening again, I used PhpStorm'sNew > PHP Classdialog (just like you did in the video), but as an extra step, I updated the Namespace field by prependingApp\to the existingControllervalue. And then I pressed Return, of course without realizing that PhpStorm will create the wrongful folder structure based on what I chose in there.If I didn't do that, the path for the new Controller would have been correct, but then the namespace inside it would have caused Symfony to throw the
Controller (...) has no container set, did you forget to define it as a service subscriber?500 Exception.To conclude, your suggestions put me back on track, for which I am grateful. But my question now is, how would you suggest I'd handle this problem, because I need PhpStorm to automatically prepend
App\to the namespace of any new Controller I'd be creating, just like it does in your video?Thank you so much, Ryan! :)
Hey @roenfeldt!
Yea, the "New -> PHP Class" dialog is great - and it is definitely NOT working correctly for you. In order for that to work, PhpStorm needs to know which namespace lives in which directory. In a Symfony app, the
App\namespace lives insrc. This convention isn't hardcoded into Symfony - it's actually a setting in yourcomposer.jsonfile: https://github.com/symfony/skeleton/blob/948939fb8ac6b1ab38547bff6f386bca3a782ed4/composer.json#L35-L39For the last 2-ish years, PHPStorm should automatically read this setting and use that when you create classes. For some reason that's not happening, or it's reading it incorrectly. Or, that feature just isn't activated for some reason. Go into your PHPStorm settings. Inside, go to
PHP -> Composerand look for a check box that saysSynchronize IDE Settings with composer.json- I believe this needs to be activated.Let me know if that helps :).
Cheers!
Hey Ryan,
Enabling the
Synchronize IDE Settings with composer.jsoncheckbox did the trick. Yay! :DThank you for clarifying this out for me!
Cheers! :)
I had a similar issue, turns out I was missing
use Symfony\Component\Routing\Annotation\Route;at the top. The file was compiling properly but hovering over the Route annotation told me that I needed to import the class."Houston: no signs of life"
Start the conversation!