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 :
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 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();
Mes 2 controllers :
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;
Index :
Login :
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(); } }
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
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; } }
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
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; }
Alors qu'en faisant le pas à pas en debuggant mon router mets les routes correctement :
avec le bon namespace et module."/", "/base/:controller", "/base/:controller/:view"
Alors que si j'essaye de mettre la route en dur comme ceci et en commentant la suite du router :
Il trouve sans problème mon controller, mais pas mon modèle....
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' ));
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.
Partager