Laravel 5

Passer de AWS S3 au systeme de fichier local

Avatar de JeromeManceau
JeromeManceau

Bonjour,

j'ai repris un site construit sur Laravel et utilisant AWS S3 pour les médias. Nous voulons changer et garder tous les médias sur notre système de fichier local. Je pensais que ce serait facile mais ça me semble plus compliqué maintenant.

Que me faut-il changer? Le fichier config/filesystems.php semble avoir la bonne configuration. Il me faudrait donc utiliser "public" au lieu de "S3", est-ce bien cela? Ensuite, j'ai vu qu'il y a pas mal de Storage::disk('s3')->exists ou $s3->put($targetpath,... dans des Models.. ... il me faudra donc changer tout cela aussi?

Si quelqu'un peut me donner quelques astuces et conseils, cela m'aiderait énormément.

Merci Jerome

Posté il y a 7 mois
Avatar de bestmomo
bestmomo

Salut,

Quand on utilise le disque par défaut il y a juste à toucher à la configuration pour pointer le disque qu'on veut, mais là avec S3 il faut aller changer dans le code partout où on utilise ce disque en lecture et écriture puisque S3 est défini explicitement chaque fois.

Posté il y a 7 mois
Avatar de JeromeManceau
JeromeManceau

Merci bestmomo!

c'est donc bien ce que je pensais... je n'y couperais pas et je dois donc bien changer toutes occurences de S3 en ce que je choisi comme nouveau disque.. Je trouve Laravel franchement ingénieux, mais là ça me semble bien compliquer la vie...

Merci encore

Posté il y a 7 mois
Avatar de F.M.
F.M.

Hello,

Très intéressant ce post, il me permet de donner une réponse qui agace dont j'ai le secret.

Tout d'abord l'"ingéniosité" de Laravel repose sur des principes géniaux de la Programmation Objet, et notamment la programmation sur une interface et surtout pas sur une instance. Le problème c'est que la plupart des développeurs Laravel ne les comprennent pas et prennent ça pour de la magie. Ce n'est pas une attaque personnelle mais un développeur ne devrait pas se contenter de penser que Laravel est "ingénieux", il devrait tout faire pour comprendre les principes fondamentaux de la programmation objet, par exemple les design patterns, l'injection de dépendances, l'inversion de contrôle, etc... Mes amis passez du temps à comprendre et à pratiquer les principes SOLID, les dieux du développement vous récompenseront à prix d'or, spirituel ou matériel : wikipedia)

En l'occurence pour ton problème, sauf si tu as plusieurs "Disk" et que tu as besoin explicitement d'écrire sur un Disk spécifique, tu ne devrais jamais appeler explicitement Storage::disk('s3') dans ton code. Tu dois injecter une interface à ton code (utilise le Contrat Laravel du Storage c'est fait pour, et utilise-le via l'api : https://laravel.com/docs/6.x/filesystem). Ensuite que t'y passes une implémentation d'un storage Local, S3, etc... tant qu'ils implémentent le Contrat, ton code n'a pas à bouger (SOLID).

Posté il y a 6 mois
Avatar de bestmomo
bestmomo

Salut,

On peut généraliser ton propos au-delà de PHP et j'ai aussi constaté que de nombreux utilisateurs par exemple de Bootstrap n'avient que des connaissances partielles en CSS, de même que des utilisateurs de JQuery ou d'autres librairies dans le genre sont souvent des quiches en Javascript. Donc insister sur les fondamentaux me paraît une saine approche ;)

Posté il y a 6 mois

Vous ne pouvez pas répondre à ce sujet.