IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Phalcon router/loader ne fonctionne pas correctement


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut Phalcon router/loader ne fonctionne pas correctement
    Bonjour,

    N'ayant pas eu de réponse depuis quelques jours sur le forum officiel de phalcon, je tente ma chance ici étant donné que ce n'est peut être qu'une erreur de PHP dans mon code.

    J'essaye de désespérément de faire fonctionner mon appli phalcon avec un loader (pour les namespaces) et un router (pour des urls personnalisées) mais cela ne fonctionne pas.

    Voici mon loader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    use Phalcon\Loader;
     
    $loader = new Loader();
     
    $loader->registerDirs(
        [
            'Controllers' => __DIR__ . '/../../app/controllers/',
            'Models' => __DIR__ . '/../../app/models/',
        ]
    )->register();
     
    //load modules controllers namespaces
     foreach (glob(__DIR__ . '/../../app/controllers/'.'*', GLOB_ONLYDIR) as $namespace_name) 
     {
        $module_name = basename($namespace_name);
     
        $registered_modules["Controllers\\".$module_name]= $namespace_name ;
     }
     
     foreach (glob(__DIR__ . '/../../app/models/'.'*', GLOB_ONLYDIR) as $namespace_name) 
     {
        $module_name = basename($namespace_name);
     
        $registered_modules["Models\\".$module_name]= $namespace_name ;
     }
     
    $loader->registerNamespaces($registered_modules)->register();
    Mon router :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    $router = new \Phalcon\Mvc\Router(false);  
     
        $router->add('/', array(
        	"namespace" => 'Controllers\Base',
            "controller" => 'index',
            "action" => 'index'
        ));
        /*$router->add('/base/login/index', array(
        	"namespace" => 'Controllers\Base',
            "controller" => 'login',
            "action" => 'index'
        )); */
     
        $registered_modules = array();
        $controller_dir = __DIR__."/../controllers/";
     
        foreach (glob($controller_dir."*", GLOB_ONLYDIR) as $namespace_name) {
            $module_name = basename($namespace_name);
     
            $registered_modules[strtolower($module_name)]= "Controllers\\".$module_name;
        }
        // add routing for all controllers, using the following convention:
        // \module\controller\action\params
        // where module is mapped to the corresponding namespace
        foreach ($registered_modules as $module_name => $namespace_name) {
            $router->add("/".$module_name."/", array(
                "namespace" => $namespace_name,
                 "module" => $module_name
            ));
     
            $router->add("/".$module_name."/:controller/", array(
                "module" => $module_name,
                "namespace" => $namespace_name,
                "controller" => 1
            ));
     
            $router->add("/".$module_name."/:controller/:action/", array(
                "module" => $module_name,
                "namespace" =>  $namespace_name,
                "controller" => 1,
                "action" => 2
            ));
     
            $router->add("/".$module_name."/:controller/:action/:params", array(
                "module" => $module_name,
                "namespace" => $namespace_name,
                "controller" => 1,
                "action" => 2,
                "params" => 3
            ));
     
        }
     
        $router->handle();
     
        return $router;
    Mes 2 controllers :
    Index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    namespace Controllers\Base;
     
    use Phalcon\Mvc\Controller;
     
    class IndexController extends Controller
    {
        public function indexAction()
        {
        	//DebugBreak("1@10.50.1.27;d=1,p=0");
            $this->response->redirect("base/login/index", true);
            $this->view->disable();
        }
    }
    Login :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    namespace Controllers\Base;
     
    use Phalcon\Mvc\Controller;
    use Models\Base\Authentification;
     
    class LoginController extends Controller
    {
        public function indexAction()
        { 
            $ident = $this->request->getPost("ident");
            $pwd = $this->request->getPost("password");
     
            $auth = new Authentication();
     
            $result = $auth->find(
            	[
            		"Login = $ident AND Mot_De_Passe = $pwd"
            	]
            );
     
            $this->view->result;
        }
    }
    Et mon modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    namespace Models\Base;       
     
    use Phalcon\Phalcon\Mvc\Model;
     
    class Authentication extends Model
    {
        protected $ID_Authentification;
        protected $Login;
        protected $Mot_De_Passe;
        protected $ID_Poste;
        protected $Token;
    }
    avec le code actuel, IndexController est trouvé sans problème. Par contre il ne trouve pas mon LoginController avec l'erreur : Exception: Module 'base' isn't registered in the application container
    Alors qu'en faisant le pas à pas en debuggant mon router mets les routes correctement :
    "/", "/base/:controller", "/base/:controller/:view"
    avec le bon namespace et module.

    Alors que si j'essaye de mettre la route en dur comme ceci et en commentant la suite du router :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $router->add('/base/login/index', array(
        	"namespace" => 'Controllers\Base',
            "controller" => 'login',
            "action" => 'index'
        ));
    Il trouve sans problème mon controller, mais pas mon modèle....

    Je ne sais d'ou vient le problème, si vous avez une idée je suis preneur.

    J'espère avoir été clair, sinon n'hésitez pas a poser des questions pour clarifier le problème.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    Problème résolu.

    Il faut juste mettre "m" dans le router pour indiquer le module et non "module"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Internet explorer 7 ne fonctionne pas correctement
    Par innova dans le forum Windows XP
    Réponses: 17
    Dernier message: 30/05/2007, 10h10
  2. Réponses: 18
    Dernier message: 19/04/2007, 17h42
  3. [MySQL] Mon code ne fonctionne pas correctement
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2007, 13h27
  4. Le débogage ne fonctionne pas correctement
    Par BNS dans le forum Visual C++
    Réponses: 4
    Dernier message: 13/07/2006, 13h59
  5. Réponses: 13
    Dernier message: 31/08/2005, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo