Bonjour, je suis encore novice sous Laravel, et dans un formulaire je peux intégrer une image. Pour l'instant, j'arrive à transférer cette image dans un dossier de mon projet, mais je n'arrive pas à intégrer le nom de l'image, ou son chemin, dans la bdd pour la réafficher ensuite.
Voici le code de ma fonction Store :

public function store(Request $request){

        $imageTempName = $request->file('image')->getPathname();
        $imageName = $request->file('image')->getClientOriginalName();
        $path = base_path() . '/public/images/';
        $request->file('image')->move($path , $imageName);
        DB::table('fiches')
            ->where('image', $imageTempName)
            ->update(['image' => $imageName]);

        $fiche = Fiche::create($request->All());

        return redirect()
            ->route('fiche.index');
    }

Du coup, qu'est-ce que je devrais rajouter (sans doutes sur mon ::create) pour intégrer le nom de mon image dans la bdd ?

Merci.

3 réponses


je ne comprend pas tu veut rennomer l'image avant de l'envoyer ou stocker le chemin de l'image ?

En tous cas pour renommer une image il faut faire ça :

$save_name = md5($profil_id).'.'.$extension; //tu la renome comme tu veut en faisant attention au injection
move_uploaded_file($avatar['tmp_name'], 'views/img/avatars/'.$save_name);

Je n'utilise pas laravel je ne sait pas quel methode ils utilise pour ça.

Arckays
Auteur

Bonjour, merci à vous deux pour vos réponses.

@neecride Désolé si je n'ai pas été assez clair ^^ en fait je cherche juste à stocker le chemin de l'image ou alors son nom dans la bdd pour m'en servir plus tard, pas besoin de la renommer :)

@Blobby Merci pour ta réponse très détaillée, je vais jeter un oeil à cette documentation, par contre est-elle spécifique à la version 5.3 ? Je suis sous 5.2 ! Et je vais essayer ce que tu m'as proposé qui, en effet, à l'air beaucoup plus simple pour mettre une image dans un dossier ^^

Edit : Quand j'essaie de faire la commande storage:link, j'ai une erreur "there are no commands defined in the storage namespace", c'est lié à ma version de laravel ou j'ai oublié quelque chose ?

Arckays
Auteur

Merci, je suis en train de regarder la doc, et des tutoriels, mais je n'arrive pas à faire mon "lien symbolique" via la commande php artisan storage:link, est-ce normal ?

Edit : Pour le moment j'ai continué de mon côté sans utiliser le filesystem à cause des quelques soucis que j'ai eu, je le ferais sur un projet à part pour m'entrainer, j'en suis arrivé là :

if($request->hasFile('image')){
            $file = $request->file('image');
            $fileName = $file->getClientOriginalName();
            $destinationPath = base_path() . '/public/images/';

            $request->file('image')->move($destinationPath, $fileName);

            Saisie::create($request->All(), [
                'image' => $fileName
            ]);

        }

Du coup, l'image se stock dans le dossier Images, et son nom se stock dans ma bdd. Mais c'est tout, j'ai d'autre champs dans mon formulaire, et si je rajoute un saisie::create($request->all()), ça va me rajouter une autre ligne, avec mes données, mais en image j'ai une url complète du genre C:\wamp\tmp\phpE64B.tmp, du coup, comment je pourrais préciser lors de mon $request->all() que le champs "image" vaut $fileName ?