Autour de Laravel

Difficultés de compréhension et problème de variable non reconnu

Avatar de Jeelo
Jeelo

Bonjour,

je développe ma première application avec Laravel et pour cela, j'ai voulu créer une galerie photo avec une partie d'administration.

J'ai suivi plusieurs tuto en ligne, cependant j'éprouve pas mal de difficultées. D'une part, je ne comprend pas pourquoi ma variable n'est pas reconnu dans mon template dans lequel je fais une boucle sur les photos, d'autres part dans la supression des photos, je n'arrive pas à supprimer l'album entier avec ses photos et les informations en base de données. Je m'y perd un peu dans tout les codes.

Je me pose plein de question sur le fonctionnement, tel que Dans le controller j'y déploi les fonctions qui donne les instructions CRUD, ces instructions sont lu par le biais de la route qui ensuite est renvoyé par la même route à la vue ?

Pour le fonctionnement de blade, l'héritage peut-il nuir à la lisibilité des variables ?

Si besoin je peux vous compresser le dossier et vous l'envoyer ! Merci d'aider un noob du développement.

Posté il y a 1 mois
Avatar de Dom
Dom

Bonjour,

le mieux est effectivement de fournir un peu de code pour comprendre tes questions. Tu devrais essayer de le mettre sur un gestionnaire de version comme github par exemple. Ensuite, pose tes questions une par une, car sinon se sera impossible pour toi de t'y retrouver.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Le mieux est que tu fasse un github public pour qu'on puisse tout voir. Ou au minimum, comme l'a dit Dom, du publier le code qui pose problème.

Posté il y a 1 mois
Avatar de Jeelo
Jeelo

Bonjour, merci Dom et CinquièmeDimension pour vos réponses. Donc j'ai envoyer sur GitHub tout le projet, c'est ma première application que je réalise de A à Z grâce aux tutos, habituellement j'utilisais WP. L'adresse est https://github.com/JeremieLoison/projetPhotoShow.git

Je me pose la question du template Blade, celui ci peut-il empêcher la lecture d'une variable ? C'est à dire, l'héritage d'un template empéchant l'accès au controller ?

Merci pour votre accompagnement.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Alors c'est sur quelle route que tu ne comprends pas pourquoi ta variable n'est pas reconue ? (on va prendre les problèmes l'un après l'autre). Moi je n'utilise pas la syntaxe

$albums = Album::with('Photos')->get();
return view('layoutsAdmin.adminPhotos')->with('albums', $albums);

Je fais plutôt

$data['albums'] = Album::with('Photos')->get();
return view('ayoutsAdmin.adminPhotos',$data);

Comme ça je sais que je passe un array même si je n'envoie qu'une variable. Mais ta méthode est valable aussi je pense. (je vois aussi que tu utilise des '< ?php' dans tes vues, il existe '@ php' dans blade)

Posté il y a 1 mois
Avatar de Jeelo
Jeelo

Bonjour,

merci 5D, je vais réécrire le code avec les @php pour bien respecter le code de blade. Pour les routes, j'ai mangé quelques lectures sur les routes, et observé les codes en ligne pour me rendre compte que j'inversais la destination de la route viewsGallery/showBio avec le nom dans l'url Biographie.

Je suis arrivé à ce code là:

Route::view('welcome', 'welcome')->name('welcome');
Route::view('Biographie', 'viewsGallery/showBio')->name('showBio');
Route::view('Galerie', 'viewsGallery/showGallery')->name('showGallery');
Route::view('Contactez-moi', 'viewsGallery/contact')->name('contact');

Les pages vont bien à leur destination.

Pour le problème de variable, c'est ma route showGallery qui m'affiche cette erreur ci:

je réalise une boucle sur les photos. Mais celle ci ne trouve pas ma variable $album qui se situe dans AlbumsController.php

Facade\Ignition\Exceptions\ViewException Undefined variable: album (View: C:\laragon\www\photoshow\resources\views\viewsGallery\showGallery.blade.php)

$album is undefined Make the variable optional in the blade template. Replace {{ $album }} with {{ $album ?? '' }}

mon code dans cette vue le voici:

@extends('viewsGallery.layouts.template')

@section('content')

@if(count($album->photos) > 0) @php $colcount = count($album->photos); $i = 1;

<div id="photos">
    <div class="column text-center">
        @foreach($album->photos as $photo)
          @if($i == $colcount)
            <div class="large-flex-dir-column">
              <a href="../photos/{{$photo->id}}">
                <img class="thumbnail" src="/storage/photos/{{$photo->album_id}}/{{$photo->photo}}"
                alt="{{$photo->title}}">
              </a>
              <br>
              <h4>{{$photo->title}}</h4>
              <a class="button alert" href="../photos/{{$photo->id}}">Supprimer la photo de l'album</a>
          @else
            <div class="large-flex-dir-column">
              <a href="photos/{{$photo->id}}">
                <img class="thumbnail" src="/storage/photos/{{$photo->album_id}}/{{$photo->photo}}"
                alt="{{$photo->title}}">
              </a>
              <br>
              <h4>{{$photo->title}}</h4>
               <a class="button alert" href="../photos/{{$photo->id}}">Supprimer la photo de l'album</a>
          @endif
          @if($i % 3 == 0)
          </div> </div><div class="row text-center">
          @else
            </div>
          @endif
          <?php $i++; ?>
        @endforeach
    </div>
</div>

@else Aucune photo à afficher ! @endif @endsection

Merci de vos explicatons.

Posté il y a 1 mois
Avatar de Hypr
Hypr

Salut Jeelo,

Dans ton controller, remplace

$albums = Album::with('Photos')->get();
return view('layoutsAdmin.adminPhotos')->with('albums',  $albums);

Par

$albums = Album::with('Photos')->get(); 
return view('layoutsAdmin.adminPhotos',  compact($albums); // envoie un tableau associatif ['albums' => $albums]  

Et réessaie.

Avatar de Jeelo
Jeelo

Bonjour Hypr,

merci en effet ça fonctionne un peu mieux, la variable est bien retrouvé et les informations passent bien dans la vue.

Vous ne pouvez pas répondre à ce sujet.