Bonjour, j'utilise un router de type :

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [NC,L,QSA]

et

$request = $_SERVER['REQUEST_URI'];

switch ($request) {
    case '/router/home' :
        include 'views/home.php';
        break;
    case '/router/' :
        include 'views/home.php';
        break;
    case '/router/about' :
        include 'views/about.php';
        break;
    case '/router/login' :
        include 'views/login.php';
        break;
    default:
        http_response_code(404);
        include 'views/404.php';
        break;
}

Comment est ce que je suis censé faire dans le cas d'une requète $_GET ?

8 réponses


ToinouPHP
Auteur
Réponse acceptée

J'ai trouvé tout seul,
EN fait, il fallait déclarer le $_GET dans la fonction

Flight::route('GET /user/@name', function($name){
    $_GET['profile'] = $name;
    include 'views/profil.php';
});

Salut ToinouPHP, Peux-tu être un peu plus claire lorsque tu dis dans le cas d'une requête $_GET ?

Ben imaginons que je veuille faire :

header('Location: profil?user=toinouphp";

Ah si je comprends bien, tu veux pouvoir récupérer les paramètres passés dans l'URL ?

Ben.. oui

Ce que tu essayes de faire là c'est un router, tu peux t'inspirer de ce tuto pour avancer je pense que ça pourra t'aider:
Créer un router en PHP

Je comprends pas pourquoi tu pose la question sachant que tu as déjà bien mis ce qu'il faut pour que ça fonctionne côté apache ?

RewriteRule ^(.*)$ index.php?path=$1 [NC,L,QSA]

Lien vers une explication des flags : https://httpd.apache.org/docs/2.4/rewrite/flags.html

Citation du lien :
Quand l'URI de remplacement contient une chaîne de requête, le comportement par défaut de la règle RewriteRule est de supprimer la query string (il s'agit des paramètres éventuellement passés dans l'URL après le caractère ?, usuellement pour les formulaires traités par la méthode HTTP GET) existante, et de la remplacer par celle nouvellement créée. Avec le drapeau [QSA], les chaînes de requête peuvent être combinées.

Considérons la règle suivante :

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Avec le drapeau [QSA], une requête pour /pages/123?one=two sera réécrite en /page.php?page=123&one=two. Sans le drapeau [QSA], la même requête sera réécrite en /page.php?page=123 - autrement dit, la chaîne de requête (query string) existante sera supprimée.

Premièrement: d'ou vient ce code ? depuis quand tu l'a ajouter ? Il aurait fallu nous le communiquer que tu changeais d'un switch vers un autre code

Ensuite: pourquoi à tu besoin de passer le get sachant que ton include va prendre en compte la variable name dans la page ?

Flight::route('GET /user/@name', function($name){
    $_GET['profile'] = $name;
    include 'views/profil.php';
});

Je te laisse tester ce code si tu ne me croit pas :
fichier a.php

<?php

function showUser(string $username)
{
    require('b.php');
}

showUser('Jean le user');

fichier b.php

<?php

echo $username . "\n";

Si je lance un php a.php j'ai bien : "Jean le user" qui s'affiche