Salut à vous,
Voila pour me remettre à faire du php, je veux faire un projet qui demande un petit site. Je le code à la main en POO et en essayant d'utiliser une structure MVC.
Mon soucis c'est que la page s'affiche bien mais pas le css alors que le lien est bon. J'ai deja reussi à l'afficher en bidouillant la façon dont je require le layout, mais depuis que j'ai rajouté une methode sur le controller permettant d'ajouter des css directement depuis l'html, il ne se charge plus (le css).
Alors le code est surement déguelasse est désolé d'avance
Le Controlleur de l'index
class IndexController extends Controller
{
public function __construct()
{
$this->render("default");
}
}
Le Controller principal
class Controller
{
public function render($layout)
{
$vars = Config::utils();
$access = "{$vars['root']}Views/Layouts/{$layout}.php";
//"C:/wamp64/www/Dupres/Views/Layouts/$layout.php"
if (file_exists($access))
return require $access;
}
public function css($css)
{
$vars = Config::utils();
$access = "{$vars['webroot']}css/{$css}.css";
//"C:/wamp64/www/Dupres/webroot/css/$css.css"
if (file_exists($access))
return "<link rel='stylesheet' type='text/css' href='{$access}'>";
else
return "<!-- Css : {$css} Introuvable :( -->";
}
public function script($script)
{
$vars = Config::utils();
$access = "{$vars['webroot']}js/{$script}.js";
//"C:/wamp64/www/Dupres/webroot/js/$script.js"
if (file_exists($access))
return "<script src='{$access}'></script>";
else
return "<!-- Js : {$script} Introuvable :( -->";
}
}
le layout en question : default.php
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Dupres</title>
<?= $this->css("app") ?> <!-- href="C:/wamp64/www/Dupres/webroot/css/app.css" -->
</head>
<body>
<header>
<div class="header-title">
<p>Dupres</p>
</div>
<div>
<div>
<img src="#" alt="switch">
</div>
</div>
<span></span>
</header>
</body>
</html>
Pour info car ça peut paraitre bizarre en le lisant mais la methode static de l'objet Config me renvoie un tableau de variables pour que je puisse y avoir acces partout. Ici des variables pour les chemins (il y a surement mieux mais pour le moment c'est ce que j'utilise)
Le reste du site c'est du classique je pense, rooter / dispatcher etc.
Donc voila en résumé c'est juste le css qui coince, pas d'erreur console, ni d'erreur à l'affichage.
Merci d'avance pour l'aide :)
Le plus simple c'est de se créer une constante
define ('BASE_URL', '/Dupres/'); // si wamp http://localhost/Dupres/...
et à changer suivant l'hébergement / vhost
define ('BASE_URL', '/'); // si hébergement http://Dupres.fr/...
pour générer les urls
$url = BASE_URL . 'js/' . $script_name ;
J'ai reussi a afficher le css. Bizarrement un lien commancant par le dossier webroot suffisait même si je ne comprend pas comment il arrive a reperer le dossier qui devrait normalement etre à ../webroot.
Merci
Je vais regarder ça pour les liens, mais a vu de nez j'ai remplacé mais ça ne change rien, je te redis
Voila la fonction pour que tu visualises mieux ^^ en gros je base tout sur les données de la variable _Server
public static function utils()
{
$vars = [
"root" => $root = $_SERVER["DOCUMENT_ROOT"]."/",
"webroot" => $webroot = $root."webroot/",
"racine" => $racine = $_SERVER["REQUEST_URI"],
"pages" => $pages = $root."Views/Pages/"
];
return $vars;
}
Bonjour,
Je ne sais pas ce qu'il y a dans $vars['ds'] mais ce ne doit surtout pas être DS de php
le Directory Separator sous Windows c'est l'anti-slash '\', dans les urls c'est le Slash'/'
le DS ne doit pas servir à contruire quoi que ce soit car le slash '/' fonctionne sur tous les systèmes;
le DS sert à parser des chemins fournis par le système , par exemple DIR ou FILE
Merci du tuyau Huggy je retiens ça.
Mais malheureusement ce n'est pas une question de slash ou d'anti-slash.
Je viens d'effectuer les changements mais idem :/
Ha ouai define j'avais oublier ^^.
Dans mon cas ça ne fonctionne pas, j'ai un virtualhost http://dupres
il ne comprend pas que la base du projet est le dossier Dupres, il va deux dossier parent au dessus xD
En gros tant que mon url ne precise pas /wamp64/www/... il ne comprend pas
Oui, c'est d'ailleurs pourquoi je l'ai pris comme variable root.
J'ai define une constante dans la base de mon site (l'index.php à la racine), j'ai essayé de la remplacer par l'utilisation que je faisais de $vars['root'] mais il ne recupere plus la page.
Merci pour votre aide mais le sujet a dérivé sur la maniere de codé et non sur le problème que je rencontre.
J'utilise maintenant les constantes (j'avais oublié ^^), mais aucun changement.
Le sujet est encore actif si vous voulez proposer des idées. Je retournerai la solution si je la trouve