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.