How are you getting $file->extension()?
Also, if user is looking for (example only) baby_first_steps.jpg
How do they find it.?
Also I suggest viewing:
https://symfonycasts.com/screencast/symfony-uploads/file-naming#play
https://symfonycasts.com/screencast/symfony-uploads/upload-in-form#play
Basically the vulnerability isn't in the name, it's in the extension.
I normally name like this, say original is ann.jpg.
ann_number of images + 1_userid
so ann_1079_127.jpg
But so far your code looks pretty good.