Besoin d'aide ?

Problème de page non trouvé

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Bonjour,

    Je pensais être sur la bonne voie avec ma vue, je penses avoir fait une erreur dans la route ou bien dans le controller, mais je vois pas l'erreur commise et j'aurais besoin d'un avis.

    Le code de ma route :

    Route::get('exercise/$id', 'ExercisesController@show')->name('exercise');

    Le code de mon controller :

    public function show(Request $id)
    {
    $exercise = Exercise::where('id', $id)->get();

    return view('exercise');
    }

    Question bonus, afin de ne pas créer un second post lier à mon problème, j'aimerais savoir si ma vue sera fonctionnel :

    @extends('layouts.app')

    @section('content')
    <div class="card">
    <div class="card-header">
    <h5 class="card-title">{{ $exercise->name }}</h5>
    </div>
    <div class="card-body">
    <div class="media">
    <?php if( $exercise->mediatype == 0) {?>
    <img class="mr-3" src="{{ $exercise->mainmedia }}" alt="{{ $exercise->name }}">
    <?php }else{ ?>
    <video class="align-self-center mr-3" width="320" height="240" controls>
    <source src="$exercise->mainmedia" type="video/mp4">
    </video>
    <?php } ?>
    <div class="media-body">
    <p>Type :&nbsp;</p>{{ $exercise->type }}
    <p>Muscle principal :&nbsp;</p>{{ $exercise->mainmuscle }}
    <p>Équipement :&nbsp;</p>{{ $exercise->equipment }}
    </div>
    </div>
    <ul class="list-group list-group-flush">
    <li class="list-group-item">
    <? php if( $exercise->media1 == 'NULL') { ?>
    <p>Aucun média supplémentaire</p>
    <?php }else{ ?>
    <img src="{{ $exercise->media1 }}">
    <?php if( $exercise->media2 == 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media2 }}">
    <?php if( $exercise->media3 == 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media3 }}">
    <?php if( $exercise->media4 == 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media4 }}">
    <?php if( $exercise->media5 == 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media5 }}">
    <?php if( $exercise->media6 == 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media6 }}">
    <?php }
    }
    }
    }
    }
    } ?>
    </li>
    <li class="list-group-item">
    <h4>Configuration :</h4><br>
    {{ $exercise->config }}
    </li>
    <li class="list-group-item">
    <div class="media">
    <img class="mr-3" src="images/muscle/man-{{ $exercise->mainmuscle }}.png">
    <div class="media-body">
    <h4>Guide :</h4><br>
    {{ $exercise->guide }}
    </div>
    </div>
    </li>
    </ul>
    </div>
    </div>
    @endsection

    S'il y a moyen de faire un if() un peu moins complexe que celui que j'ai fait, je suis preneur, techniquement, sa devrait être fonctionnel, mais mes connaissances php date de l'ère Jurassique de la programmation web.

    Merci de votre aide et de vos suggestion pour mon if().

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Bonjour,

    Au niveau de la route il faut plutôt ceci :

    Route::get('exercise/{id}', 'ExercisesController@show')->name('exercise');

    Tu pourrais simplifier le code avec du model binding et surtout envoyer les données dans la vue :

    public function show(App\Exercise $exercise)
    {
    return view('exercise', compact('exercise');
    }
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Petit soucis avec mon if(). Je reçois se message : Parse error: syntax error, unexpected 'if' (T_IF) (View: /Applications/MAMP/htdocs/leveluplife/resources/views/exercise.blade.php).

    @extends('layouts.app')

    @section('content')
    <div class="card">
    <div class="card-header">
    <h5 class="card-title">{{ $exercise->name }}</h5>
    </div>
    <div class="card-body">
    <div class="media">
    <?php if( $exercise->mediatype == 0) {?>
    <img class="mr-3" src="{{ $exercise->mainmedia }}" alt="{{ $exercise->name }}">
    <?php }else{ ?>
    <video class="align-self-center mr-3" width="320" height="240" controls>
    <source src="$exercise->mainmedia" type="video/mp4">
    </video>
    <?php } ?>
    <div class="media-body">
    <p>Type :&nbsp;</p>{{ $exercise->type }}
    <p>Muscle principal :&nbsp;</p>{{ $exercise->mainmuscle }}
    <p>Équipement :&nbsp;</p>{{ $exercise->equipment }}
    </div>
    </div>
    <ul class="list-group list-group-flush">
    <li class="list-group-item">
    <? php if( $exercise->media1 === 'NULL') { ?>
    <p>Aucun média supplémentaire</p>
    <?php }else{ ?>
    <img src="{{ $exercise->media1 }}">
    <?php if( $exercise->media2 === 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media2 }}">
    <?php if( $exercise->media3 === 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media3 }}">
    <?php if( $exercise->media4 === 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media4 }}">
    <?php if( $exercise->media5 === 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media5 }}">
    <?php if( $exercise->media6 === 'NULL') { ?>
    <img src="images/icons/si-glyph-image.svg">
    <?php }else{ ?>
    <img src="{{ $exercise->media6 }}">
    <?php }
    }
    }
    }
    }
    } ?>
    </li>
    <li class="list-group-item">
    <h4>Configuration :</h4><br>
    {{ $exercise->config }}
    </li>
    <li class="list-group-item">
    <div class="media">
    <img class="mr-3" src="images/muscle/man-{{ $exercise->mainmuscle }}.png">
    <div class="media-body">
    <h4>Guide :</h4><br>
    {{ $exercise->guide }}
    </div>
    </div>
    </li>
    </ul>
    </div>
    </div>
    @endsection

    Je pensais que s'était le fait qu'il manquait peut-être un '=', mais il semble que non, sinon sa vient de mes variables qui serait en fait vide.
    Dans le cas où sa viendrait de mon controller :

    <?php

    namespace App\Http\Controllers;

    use App\Models\Exercises;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;

    class ExercisesController extends Controller
    {
    /
    Display a listing of the resource.

    @return \Illuminate\Http\Response
    /
    public function index()
    {
    $exercises=Exercises::all();

    return view('exercises', compact('exercises'));
    }

    /

    Show the form for creating a new resource.

    @return \Illuminate\Http\Response
    /
    public function create()
    {
    //
    }

    /
    Store a newly created resource in storage.

    @param \Illuminate\Http\Request $request
    @return \Illuminate\Http\Response
    */
    public function store(Request $request)
    {
    //
    }

    /*
    Display the specified resource.

    @param int $id
    @return \Illuminate\Http\Response
    /
    public function show(Exercises $exercise)
    {
    /$exercise = Exercise::where('id', $id)->get();

    return view('exercise');
    /

    return view('exercise', compact('exercise'));
    }

    /

    Show the form for editing the specified resource.

    @param int $id
    @return \Illuminate\Http\Response
    */
    public function edit($id)
    {
    //
    }

    /
    Update the specified resource in storage.

    @param \Illuminate\Http\Request $request
    @param int $id
    @return \Illuminate\Http\Response
    /
    public function update(Request $request, $id)
    {
    //
    }

    /

    Remove the specified resource from storage.

    @param int $id
    @return \Illuminate\Http\Response
    */
    public function destroy($id)
    {
    //
    }
    }

    Mon modèle Exercises qui se trouve dans le répertoire App\Models :

    <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Model;

    class Exercises extends Model
    {
    protected $fillable = [
    'name', 'equipment', 'type', 'mainmuscle', 'config', 'guide', 'mediatype', 'mainmedia', 'media1', 'media2', 'media3', 'media4', 'media5', 'media6',
    ];
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Salut,

    Tant qu'à faire autant utiliser les instructions conditionnelles de Blade plutôt que le lourd tempating classique de PHP.

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Salut bestmomo,

    J'ai suivis tes recommandation et la page s'affiche sans m'amener vers la page d'erreur générer par Laravel. Par contre, tous les fichiers images me renvois des erreurs 404 ainsi que les fichiers JavaScript avec le même type d'erreur 404. De plus, mes variables $exercise-> semble être entièrement vide, mais celle Auth::user()-> fonctionne sans difficulté. Je crois faire face à deux problématiques.

    Pour se qui concerne mes erreurs 404, je soupçonne que s'est lié à mon URL : localhost:8000/exercise/1, le lien que j'avais inscrit dans ma vue pour récupérer les informations afin de récupérer l'exercice sélectionné. En php, afin de récupérer j'aurais créé l'URL sous cette forme exercise.php?id=1 et grâce au get, j'aurais récupérer la variable pour ensuite effectué la récupération de l'information lié à l'exercice désiré. Est-ce que sa serait causé par l'URL de sortie comme je le soupçonne?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Salut,

    Pour les images utilise l'helper asset :

    <img src="{{ asset(images/icons/si-glyph-image.svg) }}">
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Imgur

    N'en demeur pas moins que j'en reviens avec le même problème initial : Undefined variable: exercise (View: /Applications/MAMP/htdocs/leveluplife/resources/views/exercise.blade.php)

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Change la route comme ça :

    Route::get('exercise/{exercise}', 'ExercisesController@show')->name('exercise');
  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Ok! Par la suite, dans mon ExercisesController@show, la configuration est comme cela :

    public function show($id)
    {
    $exercise = Exercises::where('id', $id)->get();

    return view('exercise', compact('exercise'));
    }

    Avec la route ajusté ainsi :

    Route::get('exercise/{id}', 'ExercisesController@show')->name('exercise');

    Imgur

    Ma variable ne semble pas suivre le fil.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Tu peux adopter cette syntaxe :

    $exercise = Exercises::findOrFail($id);

    Si l'enregistrement existe avec cet id il devrait venir, teste avec un dd($exercise).

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    Merci grandement de ton aide!

    Tu as sûrement compris que je débutes avec Laravel et que je dois oublier plus ou moins se que je maîtrisais du PHP.

    J'ai un dernier soucis à résoudre.

    Mes fichiers images, JavaScript et CSS sont considérer comme se trouvant dans un répertoire non existant.
    Style : http://localhost:8000/exercise/css/app.css

    Techniquement, il se trouve ici : Imgur

    J'ai aucune idée de comment résoudre se problème.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Tu as un hôte virtuel en local ?

    Quelle est l'url quand tu accèdes au site ?

  • Avatar de ThorOddin'sSon
    Membre depuis :
    31/01/2018
    Messages :
    98

    J'utilise MAMP sur Mac pour avoir un MySQL accessible et je lance le serveur Apache avec php artisan serve, sinon Laravel ne fonctionne pas optimalement avec MAMP.

    Donc, quand je suis à la racine du projet http://localhost:8000 et je me retrouve selon les informations que j'ai trouvé dans le répertoire public de Laravel.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    C'est curieux cet "exercise" qui vient se glisser dans l'url... Personnellement je prévois tous les urls relatifs au root donc par exemple :

    <img src="/images/icons/si-glyph-image.svg">
  • Avatar de Gwendolau
    Membre depuis :
    01/08/2017
    Messages :
    11

    J'ai l'étrange impression que s'est due au fait que l'adresse qui permet l'affichage des exercices individuellement est le problème : http://localhost:8000/exercise/1, sa donne l'impression que la page qui permet d'afficher l'exercice se trouverais dans le répertoire 1.

    Quand je créais des sites web php, j'avais souvent à faire avec se problème où je devais parfois inscrire des adresses urls relatifs comme l'exemple que tu mentionnes et d'autre fois, je devais faire ../images/icons/si-glyph.image.svg ou ../../images/icons/si-glyph-image.svg.

    J'apprends actuellement à utiliser Laravel, j'aimerais faire un test, mais j'ignore comment le réalisé. Est-ce qu'il existe une manière que l'URL appellant l'exercice http://localhost:8000/exercise/1 se transforme en http://localhost:8000/exercise tout en permettant au donner récupérer avec la variable 1 d'être expédié? J'ai essayé avec un redirect, mais j'ai rapidement percuter un message d'erreur générer par Laravel.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Il y a deux façons de gérer les urls :

    • avec les helpers url et asset et du coup on a une url absolue
    • en codant en relatif de façon classique

Vous ne pouvez pas répondre à ce sujet.