Laravel fonction avec paramètres dans vue

Par Geek Boy (GeekBoy), il y a 7 ans


Bonjour , à tous je débute sous Laravel et en POO , je suis en train de créer un site de pronostics de paris sportifs , et une de mes vues qui est la page d'accueil , j'ai un tableau avec tous les derniers résultats
comme ceci :

Voici la boucle de mon tableau de résultats

@foreach ($bets as $bet) <tr> <td>{{$bet->user->name}}</td> <td>{{ $bet -> sport}}</td> <td>{{ $bet -> event}}</td> <td>{{ $bet -> date_event}}</td> <td>{{ $bet -> prognosis}}</td> <td>{{ $bet -> cost}}</td> <td>{{ $bet -> stake}}</td> <td></td> <td>{{ $bet -> result}}</td> </tr> @endforeach

Ce que je veux

Je voudrais simplement pouvoir créer plusieurs fonctions , pour pouvoir me retourner des icones selon le texte que renvoie cette requête , comme par exemple pour le sport {{ $bet->sport}} j'aurais besoin d'une fonction de ce style getIconSport( $bet->sport); qui me retourne l'icone football ou tennis etc.. une fonction toute bête comme ceci , que je fesait en PHP pure.

// Retourne l'icone du sport function getIconSport($sport, $type) { if ($sport == "Football") { ?> <img class="sport_logo" src="public/img/football.png" alt=""> <?php } elseif ($sport == "Tennis") { ?> <img class="sport_logo" src="public/img/tennis.png" alt=""> <?php } elseif ($type == "Combiné") { ?> <img class="sport_logo" src="public/img/combi.png" alt=""> <?php } }

Si quelqu'un aurais une solution car je ne c'est pas comment faire , ça me permettrais d'avancer.

5 réponses

Lartak, il y a 7 ans

Bonjour.
Tu pourrais par exemple utiliser des accesseurs (Accessors).
Par exemple :

public function getIconSport() { $icon = ''; switch ($this->sport) { case 'Football': $icon = '...'; break; // etc ... } return $icon; }
Geek Boy (GeekBoy), il y a 7 ans

J'obtien cette erreur
Using $this when not in object context
j'ai mis la fonction en static sinon ça planter

Mon appelle de fonction est t-il bon dans mon controler ?

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use App\Bet_simple; //use App\Http\Controllers\BetsController; class HomeController extends Controller { public function home() { $nbTipsters = User::countTipsters(); $tipsters = User::getTeam(); $bets = Bet_simple::getBetsIsClosed(); $nbBets = Bet_simple:: countBetsIsClosed(); $sport = Bet_simple::getIconSport(); //$test = Bet_simple:: test(); return view('pages/home', [ //'test' =>$test, 'sport'=> $sport, 'nbBets' => $nbBets, 'bets' => $bets, 'nbTipsters' => $nbTipsters, 'tipsters' => $tipsters, ]); } }

dois-je appelé ma fonction comme ceci

<td><img class="sport_logo" src="img/{{ $bet->getIconSport}}.png" alt=""></td>
Lartak, il y a 7 ans

La fonction est à créer dans ton modèle : Eloquent: Mutators.
Ce n'est pas dans ton controlleur que tu dois utiliser la fonction, mais depuis ta vue, exemple :

<td><img class="sport_logo" src="img/{{ $bet->icon_sport }}.png" alt=""></td>
Geek Boy (GeekBoy), il y a 7 ans

Ok j'ai donc suprimmer mon appelle de fonction dans mon controller

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use App\Bet_simple; //use App\Http\Controllers\BetsController; class HomeController extends Controller { public function home() { $nbTipsters = User::countTipsters(); $tipsters = User::getTeam(); $bets = Bet_simple::getBetsIsClosed(); $nbBets = Bet_simple:: countBetsIsClosed(); //$sport = Bet_simple::getIconSport(); //$test = Bet_simple:: test(); return view('pages/home', [ //'test' =>$test, //'sport'=> $sport, 'nbBets' => $nbBets, 'bets' => $bets, 'nbTipsters' => $nbTipsters, 'tipsters' => $tipsters, ]); } }

et dans vue

<td><img class="sport_logo" src="img/{{ $bet->getIconSport}}.png" alt=""></td>

Voici ma fonction dans mon model

public function getIconSport() { $icon = ''; switch ($this->sport) { case 'Football': $icon = 'football'; break; // etc ... } return $icon; }

J'obtien cette erreur:

App\Bet_simple::getIconSport must return a relationship instance. (View: D:\Documents\GitHub\TeamBet-Laravel\resources\views\pages\home.blade.php)

Geek Boy (GeekBoy), il y a 7 ans

ça fonctionne !! j'avais oublié les () à ma fonction , un grand merci à toi car plusieurs personnes me proposer des solutions mais la tienne est la plus simple