11
votes

Le contrôleur par défaut de codeigniter dans un sous-répertoire ne fonctionne pas

Mon par défaut_Controller dans la configuration des itinéraires est défini comme "home.php".

J'ai un serveur sous-répertoire pour mes contrôleurs, permet de l'appeler "dossier". Donc, si je visitez http://mysite.com/folder/ , le dossier du contrôleur par défaut "dossier / home.php "devrait être appelé droit?

Cependant, pour une raison quelconque, cela ne fonctionne pas, je reçois un 404. Visiter http://mysite.com/ dossier / home ou http://mysite.com/folder/home/index fonctionne comme prévu. En plus de cela, le contrôleur par défaut fonctionne dans le répertoire racine ( http://mysite.com charges home.php).

Des idées, quelqu'un d'autre a-t-il vécu cela? Je ne peux pas avoir la tête autour de moi - cela semblerait être un problème de CI, mais je ne trouve personne d'autre ayant le même problème.

La documentation, de la façon dont je comprends au moins, suggère que cela devrait fonctionner correctement: http://codeigniter.com/user_guide/general/controlers.htm#subfolders

Définition du contrôleur par défaut sur "dossier / home.php" signifie que http://mysite.com/folder/ < / a> fonctionne bien comme prévu. Sauf que je veux que le contrôleur par défaut soit juste être "home.php" - que ce soit dans la racine ou dans un répertoire sous-répertoire, home.php dans ce répertoire doit être chargé, car la documentation suggère.

acclamations


4 commentaires

La manière dont j'ai lu la section du sous-dossier du Guide de l'utilisateur est que chaque sous-dossier devra avoir sa propre valeur par défaut_controller, comme vous l'avez fait avec "dossier / home.php"


J'ai vraiment du mal à comprendre de cette façon, je l'ai répété tant de fois ... Cela signifierait ajouter un nouvel itinéraire pour chaque répertoire et n'est pas vraiment identique au "contrôleur par défaut". Je peux certainement le faire de cette façon, si nécessaire si besoin d'être, dans ce cas, je n'utilise que un seul répertoire, mais dans les projets futurs, je vais certainement utiliser plusieurs répertoires sous la racine. Bravo pour la lecture et la réaction.


A fait un test et semble qu'il devrait réellement fonctionner en déclarant une par défaut_controller pour tous les sous-dossiers. Je pouvais voir un acheminement en conflit, mais pas si vous obtenez un 404. Je suis exclu.


Donc ça fonctionne bien pour vous? Auquel cas je peux probablement le mettre à mon installation, quelque chose que j'ai mal fait quelque part ou quelque chose de mal configuré.


9 Réponses :


1
votes

La route par défaut est utilisée pour indiquer à CI, quelle classe de contrôleur doit être chargée si l'URI ne contient aucune donnée.

Entrez la description de l'image ici xxx

donc, lorsque je charge xxx

Le meilleur contrôleur sera chargé. < / p>

aussi lorsque je charge xxx

ou xxx

Le meilleur contrôleur sera chargé.


1 commentaires

Avez-vous couru cela avec succès auparavant?



26
votes

Pour chaque sous-dossier de votre dossier de contrôleurs, vous devez spécifier un contrôleur par défaut dans routes.php . L'itinéraire $ ['default_controller'] ne fonctionnera pas pour les sous-dossiers.

par exemple: pour définir le contrôleur par défaut pour vous dossier Sous-dossier sur home Ajoutez les éléments suivants à votre /application/config/routes.php Fichier: xxx

ce qui signifie http : //mysite.com/folder/ est identique à celui http://mysite.com/folder/home comme URL.


3 commentaires

J'ai été confronté à la situation de vouloir mon défaut_controller pour accéder à un contrôleur dans un sous-dossier. J'ai pu l'obtenir en créant un autre contrôleur en dehors du sous-dossier et en apportant la valeur par défaut. Le nouveau contrôleur a simplement fait un redirection ('/ dossier / home') dans l'index ()


@Yassersouri, j'ai ajouté votre code dans routtes.php mais ça ne marche pas. Je reçois un objet d'erreur non trouvé.


@ user9437856 Ceci est très ancien, la nouvelle version de CodeDIGITER aurait peut-être changé.



4
votes

Si vous souhaitez rester flexible, vous devez tout transmettre après le dossier de départ (dans Application / config / config.php CODE>):

$route['home'] = "home/whatever";
$route['home/(:any)'] = "home/whatever/$1";


0 commentaires

15
votes

Vous pouvez étendre le routeur système selon les exigences,

  1. Créer mon_Router.php dans Application / CORE / CODE> Répertoire LI> ol>

    p>

    / * * Pour changer cet en-tête de licence, choisissez les en-têtes de licence dans les propriétés du projet. * Pour changer ce fichier de modèle, choisissez Outils | Modèles * et ouvrez le modèle dans l'éditeur. * / p> xxx pré>

    et écraser _set_default_controller () code> à partir de la méthode personnalisée, il fonctionnera à partir du contrôleur de sous-répertoires comme contrôleur de répertoire racine. P >

    et dans application / config / config / routtes.php code> p>

    Si vous avez besoin de contrôleur par défaut sous le répertoire par défaut, P>

     $route['default_controller'] = "welcome/index";
    
  2. Admin - Dossier Li>
  3. administrateurs - contrôleur li>
  4. Connexion - Méthode Li> ul>

    Si vous avez besoin d'un contrôleur par défaut de répertoire racine, alors p> xxx pré>

    • Bienvenue - Contrôleur Li>
    • Index - Méthode LI> ul>

      Je ne sais pas qu'il fonctionnera dans toutes les versions, mais testé dans CI3.0.6 strong> p> P>


4 commentaires

Vous venez de me sauver le stress de la ré-création de cette ... Thumbs Up!


@Girish, ci-dessus code est pour défaut_controller, si l'utilisateur souhaite accéder à l'URL exemple / admin quelque chose comme $ route [' admin '] = "admin / index"; est-ce que ça marchera? Parce que je reçois un objet d'erreur non trouvé.


C'est un code d'extension pour le contrôleur de contrôleur / subdircetory pour le routeur de contrôleur par défaut avec le contrôleur par défaut CI. il devrait fonctionner selon les exigences


Hey @girish, j'ai ajouté My_Router.PHP et définissez le par défaut_controller comme public / home car j'ai un directeur public à l'intérieur du contrôleur dir et un contrôleur Home.php à l'intérieur du directeur général qui ont une action indexée. J'ai ajouté base_url dans config.php aussi. mais ne peut toujours pas accéder à la valeur par défaut_controller avec / . Bien que tous les autres itinéraires spécifiés dans les routes.php fonctionnent. Que devrais-je avoir manqué? PS: Cela fonctionne correctement bien dans Localhost, Live Server ayant un problème.



0
votes

ma structure de dossier xxx pré>

dans config / routes.php strong> p> xxx pré>

dans les contrôleurs /homeindex.phpled_strong >

<?php    
defined('BASEPATH') OR exit('No direct script access allowed');
require_once(APPPATH.'controllers/frontend/Home.php');    
class homeIndex extends home {    
    public function index() {
        $this->action();
    }    
}


0 commentaires

3
votes

Ajoutez cette ligne dans application / config / routes.php xxx


0 commentaires

0
votes

dans application / config / routes.php Add Cette

$this->set_directory( "user" );
$route['default_controller'] = 'home/index';


0 commentaires

0
votes

Si j'utilise le code suivant xxx

, un autre itinéraire dans un autre réseau de sous-répertoires ne fonctionne pas.

Supposons que j'utilise l'utilisateur sous-répertoire dans le répertoire de contrôleur pour Contrôleur par défaut. Mais si j'aime utiliser le sous-répertoire avanttend pour un autre itinéraire, xxx

alors il ne fonctionne pas.


0 commentaires

0
votes

Même si la question a beaucoup (et une réponse acceptée), je voudrais encore poster le mien.

J'ai compris que les sous-dossiers fonctionnent pour des itinéraires réguliers. Par exemple, je peux faire: xxx

et si je visitent site / frontal / test , cela fonctionne comme prévu. Le problème consiste à obtenir "default_controller" pour fonctionner avec les sous-dossiers. Par exemple, ce qui suit ne fonctionne pas: xxx

si nous examinons le Routage URI> Routes réservées , il est indiqué:

Vous ne pouvez pas utiliser de répertoire dans une partie de ce paramètre!

Nous devons donc avoir besoin de pirater notre chemin. J'ai utilisé Girish 's Approche . J'ai examiné le system / core / router.php et créé application / core / my_router.php .

Au début, je pensais que Girish fait Un changement statique de la méthode _set_default_controller , qu'elle ne permet que des sous-dossiers. Je pensais que cela devrait être dynamique et que le sous-dossier devrait être facultatif. Plus tard, je me suis rendu compte qu'il faisait une affaire pour cela aussi, mais son code a dupliquer la logique et j'étais déjà fait avec le mien. Donc, je le pose quand même. xxx


0 commentaires