Bonjour , j'ai suivi la formation PHP et je cherche à ajouter un CSS perso et pouvoir utiliser jquery et du JS perso, mais avec Altorouter j'ai une erreur 500 que je n'arrive pas a corriger. en fait Altorouter n'arrive pas à trouver la bonne route du CSS perso et des differents scripts JS.

auriez vous une idée sur la solution a apporter à ce soucis?

merci d'avance.

Gilles

5 réponses


Carouge10
Réponse acceptée

Bonsoir,
Tu peux définir une contante dans ta page index, qui sera l'url de base

define('BASE_URL', dirname($_SERVER['SCRIPT_NAME']));

pour ensuite l'utiliser sur ta view

<link rel="stylesheet" href="<?= BASE_URL; ?>/css/style.css" >

Bonjour,

Est-il possible d'avoir le code et les différentes solutions déjà testée svp ?

gilles40
Auteur

Bonjour,

ci-dessous le Layout ou j'ai mis le chemin vers le script JQUERY vendor/components/jquery/ , le fichier router et l'index.php qui se trouve dns le dossier public ou j'ai toutes mes route.

merci d'avance.

Gilles

<!DOCTYPE html>
<html lang="fr" class="h-100">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?= isset($title) ? e($title) : 'Appli Massoutre' ?></title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

</head>
<body class="d-flex flex-column h-100">
<nav class="navbar navbar-expand-lg navbar-dark bg-danger">
        <a href="/" class="navbar-brand">Applications Massoutre</a>
        <ul class="navbar-nav">
            <li class="nav-item">
                <form action="<?= $router->url('login') ?>" method="post" style="display:inline">
                    <button type="submit" class="nav-link" style="background:transparent; border:none;">Se connecter</button>
                </form>
            </li>
        </ul>
    </nav>

    <div class="container mt-4">
        <?= $content ?>
        toto
    </div>

    <footer class="bg-light py-4 footer mt-auto">
        <div class="container">
            <?php if (defined('DEBUG_TIME')): ?>
            Page générée en <?= round(1000 * (microtime(true) - DEBUG_TIME)) ?> millisecondes.
            <?php endif ?>
        </div>
    </footer>

  <script src="../../vendor/components/jquery/jquery.js"></script>
</body>
</html>

le routeur

<?php
namespace App;

class Router {

    /**
     * @var string
     */
    private $viewPath;

    /**
     * @var AltoRouter
     */
    private $router;

    public $layout = "layouts/default";

    public function __construct(string $viewPath)
    {
        $this->viewPath = $viewPath;
        $this->router = new \AltoRouter();
    }

    public function get(string $url, string $view, ?string $name = null): self
    {
        $this->router->map('GET', $url, $view, $name);
        return $this;
    }

    public function post(string $url, string $view, ?string $name = null): self
    {
        $this->router->map('POST', $url, $view, $name);
        return $this;
    }

    public function match(string $url, string $view, ?string $name = null): self
    {
        $this->router->map('POST|GET', $url, $view, $name);
        return $this;
    }

    public function url (string $name, array $params = [])
    {
        return $this->router->generate($name, $params);
    }

    public function run(): self
    {
        $match = $this->router->match();
        //dd($match);
        $view = $match['target'];
        $params = $match['params'];
        $router = $this;
        ob_start();
        require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php';
        $content = ob_get_clean();
        require $this->viewPath . DIRECTORY_SEPARATOR . $this->layout . '.php';

        return $this;
    }
}

et mes differentes routes:

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

define('DEBUG_TIME', microtime(true));

$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

if(isset($_GET['page']) && $_GET['page'] === '1') {
    $uri = explode('?', $_SERVER['REQUEST_URI'])[0];
    $get = $_GET;
    unset($get['page']);
    $query = http_build_query($get);
    if (!empty($query)) {
        $uri = $uri . '?' . $query;
    }
    header('Location: ' . $uri);
    http_response_code(301);
    exit();
}

$router = new App\Router(dirname(__DIR__) . '/views');
$router
    ->get('/', 'home/index', 'home')
    ->match('/login', 'auth/login', 'login')
    ->post('/logout', 'auth/logout', 'logout')
    ->get('/departs', 'ra/departs', 'departs')
    ->get('/overdue', 'ra/overdue', 'overdue')
    ->get('/jquery','vendor/components/jquery/jquery.js','jquery')
    //->get('/open', 'ra/open', 'open')
    ->match('/open', 'ra/en_cours', 'open')

    //ADMIN
    //Gestion des contrats
    ->get('/admin', 'admin/index', 'admin')
    ->match('/admin/ra/import', 'admin/ra/import_departs', 'admin_import_departs')
    ->match('/admin/ra/update', 'admin/ra/update_contrat', 'admin_update_contrats')
    ->match('/admin/ra/champ', 'admin/ra/maj_champ', 'admin_maj_champ')
    ->get('/admin/ra/overdue', 'admin/ra/overdue', 'admin_overdue')
    ->match('/admin/ra/en_cours', 'admin/ra/en_cours', 'admin_en_cours')
    //Gestion des contrats Aravis
    ->match('/admin/aravis/import', 'admin/aravis/import_departs', 'admin_aravis_import_departs')
    ->match('/admin/aravis/update', 'admin/aravis/update_contrat', 'admin_aravis_update_contrats')
    ->match('/admin/aravis/champ', 'admin/aravis/maj_champ', 'admin_aravis_maj_champ')
    ->get('/admin/aravis/overdue', 'admin/aravis/overdue', 'admin_aravis_overdue')
    //Gestion des districts
    ->get('/admin/districts', '/admin/district/index', 'admin_districts')
    ->match('/admin/district/new', '/admin/district/new', 'admin_district_new')
    ->match('/admin/district/[i:id]', '/admin/district/edit', 'admin_district')
    ->post('/admin/district/[i:id]/delete', '/admin/district/delete', 'admin_district_delete')
    //Gestion des secteurs
    ->get('/admin/secteurs', '/admin/secteur/index', 'admin_secteurs')
    ->match('/admin/secteur/new', '/admin/secteur/new', 'admin_secteur_new')
    ->match('/admin/secteur/[i:id]', '/admin/secteur/edit', 'admin_secteur')
    ->post('/admin/secteur/[i:id]/delete', '/admin/secteur/delete', 'admin_secteur_delete')
    //Gestion des agences
    ->get('/admin/agences', '/admin/agence/index', 'admin_agences')
    ->match('/admin/agence/new', '/admin/agence/new', 'admin_agence_new')
    ->match('/admin/agence/[i:id]', '/admin/agence/edit', 'admin_agence')
    ->post('/admin/agence/[i:id]/delete', '/admin/agence/delete', 'admin_agence_delete')
    //

    //PV
    ->match('/pv/[*:slug]-[i:id]', 'pv/show', 'pv')
    ->get('/pv', 'pv/index', 'liste_pv')
    ->match('/category/[*:slug]-[i:id]', 'category/show', 'categorie')
    ->get('/category', 'category/index', 'category')
    ->run();

Merci pour le code,

Bon je ne suis pas un spécialiste des Routers, à titre personnel j'utilise mon propre Router "maison" comme ça je n'ai pas de mal à le faire fonctionner... et je n'ai pas vu non plus la formation PHP de Grafikart.

J'ai quand même regardé, il y a 2 trucs qui me choquent, sans forcément m'en dire que ce soit des pistes valables...

  • dans ta balise "script" tu déclare le chemin suivant "../../vendor/components/jquery/jquery.js", ça ne semble pas correspondre à ce qui est déclaré dans les routes;
  • la méthode "run" charge le contenu d'une "execution php" dans un buffer... je pense pas que ça puisse fonctionner avec du Js, du Css, ou autre chose que du PHP, le problème est peut être là... ;
gilles40
Auteur

Bonjour,

merci de vous être penché sur mon problème.

Gilles