Laravel 5

problème de mise à jour

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    Salut à tous!

    Je viens vers vous à travers ce message, pour vous faire part d'un problème que je rencontre sur mon projet.
    En effet, j'ai un formulaire pour l'enregistrement de d'une offre avec plusieurs champs.
    L'enregistrement marche à la perfection grace au système de resource de laravel.

    C'est problème est au niveau de la mise à jour.
    Lorsque j'éffectue un update, ça marche que sur un champs et le reste de fonctionne pas.
    En d'autre terme, avec 5 champs c'est que le premier champ qui fonctionne.

    Je ne pense pas avoir melangé quelque chose.
    Peut être qu'il existe une autre methode pour valider la date, supprimer l'image courante et conserve l'image mis à jour.
    Je laisse les différent code.

    la vue

    <form class="form-horizontal" role="form" enctype="multipart/form-data" method="POST" action="{{route('update_emplois', $emplois )}}">
    {{ csrf_field() }} {{ method_field('PUT') }}
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Poste</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" value="{{ old('poste') ?? $emplois->poste }}" id="form-field-1-1" name="poste" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Type</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" value="{{ old('typeoffre') ?? $emplois->typeoffre }}" id="form-field-1-1" name="typeoffre" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Date limite</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="date" id="form-field-1-1" value="{{ old('datelimite') ?? $emplois->datelimite }}" name="datelimite" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Lieu</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" id="form-field-1-1" value="{{ old('lieu') ?? $emplois->lieu }}" name="lieu" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Niveau</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" id="form-field-1-1" value="{{ old('niveaux') ?? $emplois->niveaux }}" name="niveaux" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Metiers</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" id="form-field-1-1" value="{{ old('metiers') ?? $emplois->metiers }}" name="metiers" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Expérience</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" id="form-field-1-1" value="{{ old('experience') ?? $emplois->experience }}" name="experience" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Image</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="file" id="form-field-1-1" name="image" class="form-control" />
    </div>
    </div>
    </div>
    <div class="form-group">
    <label class="col-sm-3 control-label no-padding-right" for="form-field-2">Contenu</label>
    <div class="col-sm-9">
    <div class="col-sm-9">
    <input type="text" id="form-field-1-1" value="{{ old('contenu') ?? $emplois->contenu }}" name="contenu" class="form-control" />
    </div>
    </div>
    </div>
    <div class="hr hr-18 dotted hr-double"></div>

    <h4 class="pink text-center" >
    <i class="ace-icon fa fa-hand-o-right green"></i>
    <input type="submit" value="Sauvegarder" class="btn btn-primary">
    </h4>
    </form>

    **Route***

    Route::resource('/admins/emplois', 'Back\EmploiController', [
    'only' => ['store', 'edit' 'update','destroy']
    ]);

    EmploiController*

    use App\Http\Requests\EmploiRequest;
    use App\Models\Emploi;
    use Image; //Image intervention
    ...
    ...

    public function update(EmploiRequest $request, Emploi $emplois)
    {
    $emplois->update([
    'poste' => $request->poste,
    'typeoffre' => $request->typeoffre,
    'datelimite' => $request->datelimite,
    'lieu' => $request->lieu,
    'niveaux' => $request->niveaux,
    'metiers' => $request->metiers,
    'experience' => $request->experience,
    'image' => $request->image,
    'contenu' => $request->contenu,

    ]);
    return redirect()->route('emplois.index', compact('emplois'))->with('success',"Mis à jours éffectuée avec succès!");
    }

    EmploiRequest

    public function rules()
    {
    return [
    'poste'=> 'required|string',
    'typeoffre'=> 'required|string',
    'datelimite'=> 'required|date',
    'lieu'=> 'required|string',
    'niveaux'=> 'required|string',
    'metiers'=> 'required|string',
    'experience'=> 'required|string',
    'image'=> 'required|mimes:jpg,JPG,jpeg,png',
    'contenu'=> 'required|string'
    ];
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2079

    Salut,

    Je sais pas si ça joue mais tous les inputs ont le même id form-field-1-1.

  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Il y a quoi dans le $fillable de Emploi.php ?

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    Merci pour l'intérêt!
    Je savais pas que les identifiants pouvais causer poroblème.

    Dansle modèle emplois on a:

    use Sluggable;

    public function sluggable()
    {
    return [
    'slug' => [
    'source' => 'poste'
    ]
    ];
    }

    protected $fillable = [
    'poste'
    ];
  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    ????????, on peux voir ce fichier ?

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    @MaitrePylos à parler de fillabe, ça ma emenné à remplir avec tous les champs et voir le comportement.
    Après avoir remplir, ça marche.

    Mais l'image seule ne fonctionne pas et je souhaite supprimer l'ancienne image dans le dossier.

    if($request->hasFile('image')){
    $image=$request->file('image');
    $filename= time() .'.'. $image->getClientOriginalExtension();
    $location= public_path('images/emplois/'.$filename);
    Image::make($image)->resize(800, 400)->save($location);
    $emplois->image = $filename;
    }
  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Quelque chose dans le genre

    `
    if($request->hasFile('image')){

    if (File::exists(public_path('/images/emplois/' . $emplois->image))) {
    File::delete(public_path('/images/emplois/' . $emplois->image));
    }

    $image=$request->file('image');

    $filename= time() .'.'. $image->getClientOriginalExtension();

    $location= public_path('images/emplois/'.$filename);

    Image::make($image)->resize(800, 400)->save($location);

    $emplois->image = $filename;

    }

    `

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    J'avais une erreur mais avec Use File, j'ai reglé.
    Maintenant plus d'érreur mais l'image de s'enregistre pas dans le dossiers, ni dans la bdd.
    C'est du à quoi ?

  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Je supose que vous faites le if après votre update ?

    Il faut donc terminé comme ceci :

    $emplois->image = $filename;
    $emplois->save();
  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    C'est pareil!
    Voici le code de la partie Update:

    public function update(EmploiRequest $request, Emploi $emplois, $id)
    {
    $emplois=Emploi::findOrFail($id);
    if($request->hasFile('image')){
    if (File::exists(public_path('/images/emplois/' . $emplois->image))) {
    File::delete(public_path('/images/emplois/' . $emplois->image));
    }
    $image=$request->file('image');
    $filename= time() .'.'. $image->getClientOriginalExtension();
    $location= public_path('images/emplois/'.$filename);
    Image::make($image)->resize(800, 400)->save($location);
    $emplois->image = $filename;
    }
    $emplois->update([
    'poste' => $request->poste,
    'typeoffre' => $request->typeoffre,
    'datelimite' => $request->datelimite,
    'lieu' => $request->lieu,
    'niveaux' => $request->niveaux,
    'metiers' => $request->metiers,
    'experience' => $request->experience,
    'image' => $request->image,
    'contenu' => $request->contenu,

    ]);

    return redirect()->route('emplois.index', compact('emplois'))->with('success',"Mis à jours éffectuée avec succès!");
    }
  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Donc dans la partie photo, tu lui dis de prendre le nom du fichier

    $emplois->image = $filename;

    Pour que quelques lignes plus loin, lui dire, 'ha ben non, met autre chose'

    'image' => $request->image,
  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    Que dois-je faire maintenant que je vous aie montré le problème ?

  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Fais un effort et relis mon dernier post, ma réponse est là

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    41

    @MaitrePylos j'ai fais l'éffort et trouvé la solution.
    Tout simplement au sortie du if on a :
    $emplois->image = $filename;
    Donc j'ai fait un dd($emplois->image) et j'ai constaté que le nom du fichier est dedans.
    J'ai fait la conclusion en fesant comme ci-dessous:

    $emplois->update([
    ...
    'image' => $emplois->image,
    ...
    ]);

    Et sa marche!

    Le seule soucis c'est le slug ui se modifie pas.

  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    173

    Perso, j'aurais simplmeent supprimer cette partie :

    'niveaux' => $request->niveaux,

    ...

    ...

    // 'image' => $request->image,

    ...

    Par contre , je comprend pas ton histoire de slug

Vous ne pouvez pas répondre à ce sujet.