Bonsoir,

Je fais appel à vous car je rencontre un problème avec la formation de Grafikart "Apprendre le PHP". J'ai suivi les vidéos jusqu'au Chapitre 58 mais je suis embêté pour afficher des images dans mes vues. J'ai des images que j'ai stocké dans le dossier public et j'aimerai les afficher dans ma vue qui liste des produits.

Cela fonctionne, je récupère le chemin vers le dossier public, et je génère le lien de l'image grâce à celui-ci et je concatène le nom de l'image et l'extension.

<img src="./images/<?= $product->getFileName() ?>" alt="Image du produit <?= $product->getId() ?>" class="img-fluid img-product">

Sachant qu'avec un getcwd(), je me trouve dans le dossier public.
J'essaye de faire la même chose dans la vue d'édition du produit, impossible d'afficher l'image alors que quand je regarde le chemin "src" généré, il correspond à mon fichier (Je peux l'ouvrir dans un nouvel onglet).

J'ai une belle erreur "No such file or directory".

Mon arborescence de projet est la suivante :

assets
public
-------- > images
----------------- > ...
src
views
-------- > layouts
-------- > views
----------------- > // La vue de listing qui fonctionne se trouve ici
----------------- > // La vue d'édition qui ne fonctionne pas se trouve ici aussi

Merci à ceux qui prendront le temps de me donner des pistes...

4 réponses


Soundboy39
Réponse acceptée

Si tu appel [URL_SITE]/produit/images/88.png dans ton navigateur, çà donne quoi ?

Bonjour,

Je ne comprend pas très bien ton problème... suite à quelle action a tu l'erreur "erreur "No such file or directory" ?
Un screenshot serait le bienvenu...

Essaie de remplacer le "." avant "/images/..." dans l'attribut SRC par l'URL de base du site (si celle-ci pointe bien vers le dossier "public")...

Ikxa
Auteur

Bonsoir,

Pardon, ce n'était pas très clair. Pour faire bref :

  • J'ai un dossier views
  • J'ai un dossier public où il y a mes routes dans un fichier index.php et un dossier d'images
    
    <?php
    // index.php

require '../vendor/autoload.php';

use App\Router;

// Déclaration des routes
$router = new Router(dirname(DIR) . '/views');
$router->get('/', 'products/index', 'products')
->match('/add', 'products/add', 'add')
->post('/delete/[i:id]', 'products/delete', 'delete')
->match('/edit/[i:id]', 'products/edit', 'edit')
->get('/produit/[i:id]', 'products/show', 'show');
$router->run();


Le problème c'est que dans la vue **index.php**, j'arrive à afficher mon image stockée dans le dossier public 

<img src="./images/<?= $product->getFileName() ?>" alt="Image du produit <?= $product->getId() ?>" class="img-fluid img-product">

Et dans **show.php** du même dossier, le même src, elle ne s'affiche pas. 

[Sun Jan 26 22:27:09 2020] [::1]:64732 [404]: /produit/images/88.png - No such file or directory



Voici mon arborescence 
[Screen de mon arborescence de projet](https://hebergeur-images.com/fr/vi/c5ac416ea0185bf479ba88ca7fb7d8d9)

J'espère que c'est un peu plus clair.. 
Ikxa
Auteur

Je suis en local, mais quand je récupère le lien dans l'attribut src de mon image avec l'inspecteur, j'arrive à l'ouvrir dans le navigateur. Le chemin semble bon. J'arrive même à faire un scandir du dossier public contenant mes images, dans ma vue, et obtenir la liste de mes fichiers mais impossible de les afficher.

Sais-tu si ça pourrait être un problème de permissions ?