Bonjour,
Je me permets de poster sur le forum car je n'arrive pas à gérer mon système de vote (sans rafraîchir la page).
Ce que je souhaite, c'est avoir la possibilité de voter pour un objet, enregistrer le vote en bdd puis afficher sans rafraîchir la page.
Si quelqu'un pouvait m'aider (débutant) je lui en serais grandement reconnaissant ;).
Merci
Et bien dans ce cas utilise le += 1 ou le ++ ;) (Il y a une méthode increment, mais je sais plus comment elle fonctionne ^^)
Salut,
Dans un premier temps, il serait bien de faire le système classique, sans Ajax, tu verra donc les données que tu as besoin afin d'executer la/les requêtes nécessaire.
Ensuite, étant donné que tu aura déjà une route associé à la méthode pour "voter", il te suffira de l'appeller en Ajax. Le plus simple serait d'écouter l'évènement submit, et d'envoyer la requête avec le formulaire séralisé.
Pour résumer :
N'hésite pas si je n'ai pas été très claire dans mon explication ;)
Salut,
Tout d'abord, merci beaucoup pour ta réponse.
J'ai fait exactement ce que tu décris et je parviens bien à envoyer les infos à mon controller puis à sauvegarder en bdd.
Mon soucis (avant de m'attaquer au passage en ajax) c'est la facon dont j'envois l'id de mon objet à mon controller. Je ne suis pas sûr que ce soit la manière conventionelle :).
Si cela ne te dérange pas je te mets un bout du code dans le post pour que tu me donnes ton avis, me dire ce qui va ou pas ?
File : modale.blade.php
@if(Auth::check())
{!! Form::model($video, ['url' => action('VideosController@addLike')]) !!}
{!! Form::hidden('id') !!}
<button type="submit" class="btn btn-primary btn-lg btn-block btn-raised">Like it</button>
{!! Form::close() !!}
@else
<div class="alert alert-dismissible alert-warning">
<button type="button" value="{{ $video }}" class="close" data-dismiss="alert">×</button>
<p><a href="steamlogin" class="alert-link">You need to login</a>.</p>
</div>
@endif
///////////////////
File : routes.php
Route::post('addlike', 'VideosController@addLike');
///////////////////
File : VideosController.php
public function addLike (VideoRequest $request)
{
$video = Videos::findOrFail($request->input('id'));
dd($video->id);
/$video->likes += 1;
$video->save();/
}
Comme tu peux le voir j'affiche seulement l'id de la vidéo pour tester mais le save marche aussi.
Merci pour ton temps
Salut, alors petit conseil, utilise les balises pour formater ton code.
Sinon, j'aurais personnellement fait comme ça :
@if(Auth::check())
{!! Form::open(['action' => ['VideosController@addLike', $video->id]]) !!}
{!! Form::button('Like it', ['type' => 'submit']) !!}
{!! Form::close() !!}
@else
You need to login.
@endif
Ensuite pour la route :
Route::post('{id}/like', 'VideosController@like');
Ce qui donnerai dans ton controller :
public function like ($id, Request $request)
{
$video = Videos::findOrFail($id);
$video->likes->increment(1);
$video->save();
return redirect(action('VideosController@show', $id));
}