繁体   English   中英

Phalcon多模块路由

[英]Phalcon Multi-Module Routing

我正在尝试为Phalcon PHP框架使用多模块配置。

我有一个与路由有关的问题,因为我的模块之一无法通过url访问。 似乎每次我尝试访问定义的模块uri时,它都会尝试调用默认的模块名称空间。 Project\\Module1\\Controllers\\Module2Controller handler class cannot be loaded

想法解决方案

url.com/module1  => module1
url.com/moudle2  => module2
url.com          => module1

在解决此问题的过程中,我已验证所有路径和名称空间均正确。 我用xdebug梳理了一下。

我用Phalcon Devtools创建了我的项目,定义了多模块类型,因为它为我提供了一个框架。 当我使用此方法时,它提供了默认的路由方法,该方法解释每个注册的模块并将其绑定到url。 这似乎不适用于我。 这是解释之前的Phalcon项目。 https://github.com/phalcon/phalcon-devtools/tree/master/templates/project/modules

路由

https://github.com/phalcon/phalcon-devtools/blob/master/templates/project/modules/routes.php

$router = $di->get("router");

foreach ($application->getModules() as $key => $module) {
    $namespace = str_replace('Module','Controllers', $module["className"]);
    $router->add('/'.$key.'/:params', array(
        'namespace' => $namespace,
        'module' => $key,
        'controller' => 'index',
        'action' => 'index',
        'params' => 1
    ))->setName($key);
    $router->add('/'.$key.'/:controller/:params', array(
        'namespace' => $namespace,
        'module' => $key,
        'controller' => 1,
        'action' => 'index',
        'params' => 2
    ));
    $router->add('/'.$key.'/:controller/:action/:params', array(
        'namespace' => $namespace,
        'module' => $key,
        'controller' => 1,
        'action' => 2,
        'params' => 3
    ));
}

模块注册

https://github.com/phalcon/phalcon-devtools/blob/master/templates/project/modules/modules.php

$application->registerModules(array(
    'module1' => array(
        'className' => 'Project\Module1\Module',
        'path' => __DIR__ . '/../apps/module1/Module.php'
    ),
    'module2' => array(
        'className' => 'Project\Module2\Module',
        'path' => __DIR__ . '/../apps/module2/Module.php'
    )
));

服务

https://github.com/phalcon/phalcon-devtools/blob/master/templates/project/modules/services.php

$di->set('router', function () {
$router = new Router();

$router->setDefaultModule('module1');
$router->setDefaultNamespace('Project\Module1\Controllers');

 return $router;
});

Phalcon提供了一个示例。 这与Phalcon工具实施不完全相同。

https://github.com/phalcon/mvc/tree/master/multiple-factory-default

任何帮助深表感谢。

我在app\\config\\routes.php定义了我的一般路由,然后在app\\config\\routes ,每个组都有一个文件(在本例中为模块)。

应用程序\\ CONFIG \\ routes.php文件

<?php
$router = new \Phalcon\Mvc\Router();

$router->setDefaultModule("frontend");

$router->add("/:module/:controller/:action/:params", array(
    'module' => 1,
    'controller' => 2,
    'action' => 3,
    'params' => 4
));

foreach (glob(__DIR__ . "/routes/*.php") as $filename) {
    include $filename;
}

$router->removeExtraSlashes(true);

return $router;

管理员\\ CONFIG \\路径\\ admin.php的

<?php

use Phalcon\Mvc\Router\Group;

//Create a group with a common module and controller
$admin = new Group(array('module' => 'admin'));

$admin->setPrefix('/admin');

$admin->add("", array(
    'controller' => 'index',
    'action' => 'index'
));

$admin->add("/foo", array(
    'controller' => 'foo',
    'action' => 'index'
));

$admin->add("/bar", array(
    'controller' => 'bar',
    'action' => 'index'
));

$router->mount($admin);

我只需要定义控制器和索引,因为其他任何操作都将是url的一部分,并且应自行路由。

编辑

的index.php

/*
 * ... includes
 */

$application = new \Phalcon\Mvc\Application($di);

$application->registerModules(array(
    'admin' => array(
        'className' => 'Calmsplash\App\Admin',
        'path' => '../app/admin/Admin.php',
    ),
    'frontend' => array(
        'className' => 'Calmsplash\App\Frontend',
        'path' => '../app/frontend/Frontend.php',
    ),
    /// ... more modules
));

我已经在模块名称后调用了我的Module文件,只是为了使其适合命名空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM