Bonjour à tous !

voilà j'ai un petit soucis que je ne comprends pas avec un require.

Voici mon code dans mon index.php (on arrive la dessus avec des .htaccess)

    define('DS', DIRECTORY_SEPARATOR); 
    define('WEBROOT', str_replace('index.php', '', $_SERVER['SCRIPT_NAME'])); 
    define('ROOT', dirname(dirname(WEBROOT))); 
    define('CORE', ROOT.'/Core');
    define('APP', ROOT.'/App');
    define('CSS', WEBROOT.'/css/');

    require ROOT."/vendor/autoload.php";

    use Core\Dispatcher;

    $dispatcher = new Dispatcher();

Et là on me dit qu'il ne trouve pas autoload.php alors qu'il est bel et bien à l'endroit où je lui demande d'aller le chercher.
l'erreur est la suivante :

 Warning: require(/MonSite/vendor/autoload.php): failed to open stream: No such file or directory in /Users/Joha/Sites/MonSite/App/Webroot/index.php on line 16

Ma structure est comme suit

  • MonSite
    • App
      • ...
      • Webroot
        • index.php
    • Core
      • ...
    • vendor
      • ...
      • autoload.php

Ce que je comprends moins c'est que si je change

  require ROOT."/vendor/autoload.php";

par

  require "../../vendor/autoload.php";

là il me trouve bien le fichier (mais j'ai d'autre erreur plus loin du même style donc ça m'aide pas plus xD)

Avez vous une idée de ce qui foire dans tout ça ?

11 réponses


SwithFr
Auteur

Il m'affiche "/MonSite" ce qui est bien la racine de mon site ;)

SwithFr
Auteur

Non mais le plus bizarre c'est que je fais exactement la même chose sur un autre projet et ça fonctionne très bien. Et justement je veux des url relative et pas aboslues

SwithFr
Auteur

Oui une structure MVC.

SwithFr
Auteur

Ouais je vois mais du coup j'ai un autre soucis, par exemple si je veux lier un fichier css maintenant ça merdouille parce que du coup dans le lien il met localhost/User..... il reprend tout le chemin, c'est pour ça que je voulais un truc non pas à partir du disque dur mais seulement à partir de la racine du site.

EDIT : Mais le pire c'est que ça marche parfaitement sur un autre projet du coup je pige pas xD

Bonjour,
Ceci défini le dossier racine de votre site et devrait vous aider:

define('ROOT' , dirname(dirname(__FILE__)));
SwithFr
Auteur

Bonjour Carouge10,
J'avais déjà tenté ça mais le problème est le même , ça me donne une URL absolue, je veux une URL relative ;)

Merci de votre aide en tout cas.

SwithFr
Auteur

Finalement pour résoudre le problème j'ai fais un truc que je trouve pas très propre mais c'est de définir route comme cela :

define('ROOT','../../'); 

du coup là ça fonctionne plutot bien, mais je ne suis pas satisfait de cette solution, donc si vous avez d'autres suggestions, je suis preneur.
Bàv,

SwithFr
Auteur

Désolé si je m'exprime mal, ou si ce que je raconte n'est pas clair ^^

Cette méthode me donne une URL absolue (donc depuis mon disque dur), et ça ne me va pas pour 2 raisons. La première c'est qu'on évite toujours d'avoir des url absolues (parce que c'est le bordel) et la seconde ça fonctionne à moitié ;)

Pour des require ça marche (presque) mais pour générer des liens ça ne marche plus du tout. Par exemple je veux faire un lien vers mon fichier css. J'ai une fonction (dans un helper Html) qui me génère ça de manière automatique. Mais si je n'ai que des URL absolues (comme le donne la solution que tu proposes, il va me générer un lien qui ressemble à ça :

<link href='localhost/User/NomUtilisateur/MonDossierQuiContientMesSites/MonSite/App/Webroot/css/style.css' rel='stylesheet' type='text/css'>

Faut imagine la fonction qui génère le lien comme ça :

function css($name){
    return '<link href="ROOT.DS."App".DS."Webroot".DS."css".$name.".css"  rel="stylesheet" type="text/css">';
}

Du coup j'ai "localhost/url..." et forcément ça va pas ;) puisque ça part de localhost.

SwithFr
Auteur

Ok je vais tester ;)

SwithFr
Auteur

Bon ça fonctionne à moitié également ^^ Je trouve ça pas pratique d'utiliser un coup ROOT un coup BASE_URL mais bon petite à petit on va finir par trouver une solution ^^

SwithFr
Auteur

Ouais c'est certain ;) Bon je vais me creuser les méninges pour trouver une solution ! Merci de ton aide et de ta patience en tout cas.