Problème d'accès au dossier public à partir de mes vues PHP

Ce sujet est résolu
Default
,

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éponse

35773
,

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

35773
,

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")...

Default
,

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

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

Default
,

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 ?