Laravel 5

Passer de AWS S3 au systeme de fichier local

  • Avatar de JeromeManceau
    Membre depuis :
    08/12/2019
    Messages :
    2

    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

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    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.

  • Avatar de JeromeManceau
    Membre depuis :
    08/12/2019
    Messages :
    2

    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

  • Avatar de F.M.
    Membre depuis :
    10/07/2017
    Messages :
    110

    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).

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    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 ;)

Vous ne pouvez pas répondre à ce sujet.