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
Réponse acceptée

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

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>

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>

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)

ç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