2016-01-01 49 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; 
}); 

這是一個快速答案,並可能需要調整你的個人情況,但應該給你一個如何完成你的目標的好主意。

相關問題