首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理控制器的Phalcon路由

管理控制器的Phalcon路由
EN

Stack Overflow用户
提问于 2016-01-01 06:15:53
回答 2查看 1.2K关注 0票数 1

我是Phalcon编程的新手,我有管理/后端和前端控制器,管理员将在‘/ Admin /:控制器/:action’服务,前端将在‘/:控制器/:action’服务。

管理控制器(KalkuRitel\Controller\ Admin命名空间)位于

代码语言:javascript
复制
app/
   controllers/
     admin/

前端控制器(KalkuRitel\Controller\前端命名空间)位于

代码语言:javascript
复制
app/
   controllers/
     frontend/

我怎样才能做到这一点?以及如何使用自己的布局在管理和前端控制器中服务404页?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 10:44:11

我建议创建模块

代码语言:javascript
复制
app/
  modules/
    admin/
      ...
    frontend/
      ...
    api/
      ...

注册模块:

代码语言:javascript
复制
$application->registerModules(array(
    'frontend' => array(
        'className' => 'Application\Frontend\Module',
        'path' => __DIR__ . '/../modules/frontend/Module.php'
    ),
    'admin' => array(
        'className' => 'Application\Admin\Module',
        'path' => __DIR__ . '/../modules/admin/Module.php'
    ),
    'api' => array(
        'className' => 'Application\Api\Module',
        'path' => __DIR__ . '/../modules/api/Module.php'
    )
));

定义正确的Module.php文件,并将路由设置得更接近于此:

代码语言:javascript
复制
use Phalcon\Mvc\Router as Router;
use Phalcon\CLI\Router as CliRouter;

/**
 * Registering a router
 */
$di->setShared('router', function () use ($application, $config) {

    if($application instanceof Phalcon\CLI\Console) {
        return new CliRouter();
    }

    $router = new Router(false);

    $router->setDefaultModule("frontend");
    $router->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_GET_URL);
    $router->removeExtraSlashes(TRUE);

    foreach($application->getModules() as $key => $module) {

        $prefix = $key == 'frontend' ? '' : ('/' . $key);

        $router->add($prefix . '/:params', array(
            'module'     => $key,
            'controller' => 'index',
            'action'     => 'index',
            'params'     => 1
        ))->setName($key);

        $router->add($prefix . '/:controller/:params', array(
            'module'     => $key,
            'controller' => 1,
            'action'     => 'index',
            'params'     => 2
        ));

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

    }


    return $router;
});

手册中更多:https://docs.phalconphp.com/pl/latest/reference/routing.htmlhttps://docs.phalconphp.com/pl/latest/reference/applications.html

票数 1
EN

Stack Overflow用户

发布于 2016-01-04 16:58:54

实现这一目标的最佳方法是创建一个多模块应用程序。

您可以在这里了解更多关于多模块应用程序设置的信息:https://docs.phalconphp.com/en/latest/reference/applications.html#multi-module

一旦为这个设置好了结构,就可以设置如下的路线:

代码语言:javascript
复制
/*
* Dependency Injector
*/
$di = new \Phalcon\Di\FactoryDefault();

/**
* Register a router
*/
$di->setShared('router', function () {
  $router = new \Phalcon\Mvc\Router();

  $router->setDefaultModule('frontend');
  $router->setDefaultNamespace('Multiple\Frontend\Controllers');

  /*
  * Frontend Routes
  */
  $router->add('/:controller/:action', array(
    'namespace'  => 'Multiple\Frontend\Controllers',
    'module'     => 'frontend',
    'controller' => 1,
    'action'     => 2
  )); 

  /*
  * Backend Routes
  */     
  $backendRoutes = new \Phalcon\Mvc\Router\Group(array(
    'namespace' => 'Multiple\Backend\Controllers',
    'module'    => 'backend'
  ));
  $backendRoutes->setPrefix('/admin');

  $backendRoutes->add('/:controller/:action', array(
    'controller' => 1,
    'action'     => 3
  ));

  $router->mount($backendRoutes);

  return $router;
});

这是一个快速的答案,可能需要调整你的个人情况,但应该给你一个好的想法,如何实现你的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34554004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档