2016-01-01 54 views
1

我是Phalcon编程的新手,我有管理员/后端和前端控制器。 管理员将在'/ admin /:controller /:action'中提供服务,前端将在'/:控制器/:动作”Phalcon Routing for Admin控制器

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

app/ 
    controllers/ 
    admin/ 

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

app/ 
    controllers/ 
    frontend/ 

我该如何做到这一点? 以及如何在管理员和前端控制器中使用自己的布局来提供404页面?

回答

1

我建议创建模块

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文件和超过设定的路线有点接近这一点:在手动

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

+0

从来没有想过用foreach创建路线:D 好主意! – ir1keren

0

完成此操作的最佳方法是创建一个多模块应用程序。

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

一旦你的结构这地方,你可以设置路线是这样的:

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

这是一个快速答案,并可能需要调整你的个人情况,但应该给你一个如何完成你的目标的好主意。

相关问题