Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 管理控制器的Phalcon路由_Php_Routing_Url Routing_Phalcon_Phalcon Routing - Fatal编程技术网

Php 管理控制器的Phalcon路由

Php 管理控制器的Phalcon路由,php,routing,url-routing,phalcon,phalcon-routing,Php,Routing,Url Routing,Phalcon,Phalcon Routing,我是Phalcon编程的新手,我有管理员/后端和前端控制器 管理员将在“/Admin/:controller/:action”服务,前端将在“/:controller/:action”服务 管理员控制器(KalkuRitel\controllers\Admin命名空间)位于 app/ controllers/ admin/ app/ controllers/ frontend/ 和前端控制器(KalkuRitel\controllers\frontend命名空

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

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

app/
   controllers/
     admin/
app/
   controllers/
     frontend/
和前端控制器(KalkuRitel\controllers\frontend命名空间)位于

app/
   controllers/
     admin/
app/
   controllers/
     frontend/
我如何做到这一点?
以及如何在管理员和前端控制器中使用自己的布局为404页面提供服务?

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

您可以在此处了解有关多模块应用程序设置的更多信息:

一旦你有了合适的结构,你就可以像这样设置路线:

/*
* 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;
});

这是一个快速的答案,可能需要根据您的具体情况进行调整,但应该会让您对如何实现目标有一个很好的了解。

我建议您创建模块

app/
  modules/
    admin/
      ...
    frontend/
      ...
    api/
      ...
注册模块:

$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
文件,然后将route设置为与此相近:

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;
});
更多手册: 和

从未想过使用foreach创建路线:D好主意!!