Bonjour,

J'ai un soucis de "routage" sur CodeIgniter 4.2.7.

Ma page d'accueil s'affiche bien, la page se recharge bien aussi quand je clique sur "accueil" dans mon menu, de ce côté là aucun soucis par contre quand je veux accéder à une autre page j'ai le message d'erreur suivant "Erreur 404".

Voici mon contrôleur :

class c_accueil extends BaseController
{
    public function index()
    {
        $data['titre'] = "Accueil";
        return
            view('v_menu')
            . view('v_accueil',$data)
            . view('v_footer');
    }
    public function espaceNintendo()
    {
        $data['titre'] = "Espace Nintendo";
        return
            view('v_menu')
            . view('v_espaceNintendo', $data)
            . view('v_footer');
    }

Voici ma base url :

public $baseURL = 'http://localhost:63342/ProjetWeb';

Voici ma route :

$routes->get('/', 'c_accueil::index');
$routes->get('/public/espaceNintendo', 'c_accueil::espaceNintendo');

Voici ma vue (v_menu) :

Donc Accueil fonctionne très bien mais pas espace Nintendo

<?=anchor(base_url().'/public/', 'Accueil')?>
<?=anchor(base_url().'/public/espaceNintendo', 'Espace Nintendo')?>

Url de ma page d'accueil qui fonctionne bien :

http://localhost:63342/ProjetWeb/public/

Pourtant l'URL dès que je clique sur "Espace Nintendo" est celle-ci :

http://localhost:63342/ProjetWeb/public/espaceNintendo

Mais ça m'affiche "erreur 404".

Avez-vous une idée d'où vient le problème ?

Mes helpers sont bien chargés sur ma base_controleur :

protected $helpers = ['html', 'form', 'url'];

5 réponses


Salut,

Je ne connais pas CodeIgniter mais une chose dans ton code m'interpelle :

$routes->get('/', 'c_accueil::index');
$routes->get('/public/espaceNintendo', 'c_accueil::espaceNintendo');

Pourquoi tu mets /public/espaceNintendo ?
J'aurai tendance à mettre /espaceNintendo car pour la page d'accueil tu n'as pas mis /public/

nana0805
Auteur

J'ai déjà essayé cette solution mais ça ne fonctionne pas non plus même en enlevant le "/public/"

Bonjour,
Premièrement les fichiers php ne doivent pas être au sein du dossier public.
C'est un dossier généralisé qui permet à tout utilisateur de voir les fichier css, js etccc. C'est un dossier que volontairement on laisse libre aux utilisateurs de consulter.

Je ne fais pas non plus du CodeIgniter, mais je ne vois effectivement pas pourquoi tu ajoutes le slash public/ et même pourquoi tu ajoutes espaceNintendo.
J'ai l'impression qu'il faudrait faire ainsi

<?=anchor(base_url().'/public/', 'Espace Nintendo')?>
$routes->get('/', 'c_accueil::espaceNintendo');

T'es méthodes m'ont lair totalement identique, et tu ne m'as pas l'air de définir spécialement une route, mais juste de manager la super variable GET.
Je ne sais pas si ça peut aider. Si tu restes coincé, je me ferai un plaisir de regarder un peu plus.

nana0805
Auteur

Bonjour,
Alors aucun de mes fichiers php sont dans "public" les fichiers sont dans leurs dossiers respectifs, c'est-à-dire les vues dans le dossier "App ->Views" pareil pour les contrôleurs et mes différents models. J'ajoute "espaceNintendo" et "/public/" car je suis étudiante et j'ai repris le cours de ma formatrice... CodeIgniter est un MVC donc le "anchor" sert simplement à donner une "URL". Après, le premier paramètre de ma route est l'URL et le second explique à ma route quel contrôleur choisir et la fonction à appliquer. Si j'applique votre réflexion pour ma route, elle ne saura plus si il faut lancer la fonction "espaceNintento()" ou si elle doit lancer "index()" donc ça ne fonctionne pas...

Bonjour Nana0805.
Le top serait que tu montres tout ton fichier Routes.php et c_accueil.php
Il faudrait également que tu montres ton arborescences de tes fichiers view. merci.

Maintenant l'erreur 404 arrive, tout simplement car pour lui. La route n'existe tout simplement pas. Sinon tu aurais du avoir des erreurs de serveur te spécifiant que tel variable ou autre n'existe pas.
Peut-être commencer par vérifier le bon comportement de ton fichier Routes.php est de créer une route vide. Tu vérifies qu'il n'y a pas d'erreur 404 avant même de te concentrer sur ton controller et ses méthodes.

Sinon :
1/ Déjà renomme ton fichier c_accueil.php par C_accueil.php. Une classe commence toujours par une majuscule. (fichier + nom de classe)
2/ Vérifie t'es namespaces. As-tu bien défini le chemin de t'es classes et methodes avant de les appeler ?

  • J'imagine que tu appeler ta classe c_accueil dans ton fichier Routes.php
  • Pour t'es templates (view) j'imagine qu'ils sont tous au même niveau dans ton arboresence. Directement après le dossier "View"
    3/ J'imagine que tu utilises au moins la version 7.4 de php.