2016-04-08 6 views
0

Ich benutze Phalcon PHP. Ich muss versuchen, die multi modules architecture zu verwenden. Ich habe ein Frontend und Backend. Die Frontend-App ist das Standardmodul. Aber ich verstehe nichts über die anderen Module. Wenn ich 50 Controller im Backend mit 10 Aktionen von Controllern habe, muss ich alle Routen für das Backend-Modul definieren?Phalcon Multi Modul Routen für andere Module

Antwort

2

Für Ihre Backend-Routen, die Sie nicht über 50 verschiedene Routen definieren, müssen alle Controller/Action-Kombinationen entsprechen. Sie können sich hauptsächlich an die von Phalcon bereitgestellten Standardrouten halten.

Dies ist ein Beispiel, das Ihren Anforderungen entsprechen könnte. Ich bin mir nicht sicher, was Ihre genaue Projektstruktur ist. Aber ausgehend von dem von Ihnen bereitgestellten Beispiel versuchen Sie Folgendes:

$router = new Phalcon\Mvc\Router(); 

// set the defaults, so Phalcon knows where to start and where to fall back to 
$router->setDefaultModule('frontend'); 
$router->setDefaultNamespace('Apps\Frontend\Controllers'); 
$router->setDefaultAction("index"); 
$router->setDefaultController("index"); 

$router->removeExtraSlashes(true); 

/* ----------------------------------------------------- */ 
/* ------------------ FRONTEND ROUTES ------------------ */ 
/* ----------------------------------------------------- */ 

$router->add('/([a-zA-Z\-]+)/([a-zA-Z\-]+)/:params', [ 
    'module'  => 'frontend', 
    'namespace' => 'Apps\Frontend\Controllers', 
    'controller' => 1, 
    'action'  => 2, 
    'params'  => 3 
]); 


/* ----------------------------------------------------- */ 
/* ------------------ BACKEND ROUTES ------------------- */ 
/* ----------------------------------------------------- */ 
// to keep your routes.php file clean, 
// you can create a separate router group for your backend routes. 

$backend = new Phalcon\Mvc\Router\Group(); 
$backend->setPrefix('/backend'); 

// for a backend route with a controller 
$backend->add('/([a-zA-Z\-]+)', [ 
    'module'  => 'backend', 
    'namespace' => 'Apps\Backend\Controllers', 
    'controller' => 1, 
    'action'  => 'index' 
]); 

// for a backend route with a controller/action 
$backend->add('/([a-zA-Z\-]+)/([a-zA-Z\-]+)', [ 
    'module'  => 'backend', 
    'namespace' => 'Apps\Backend\Controllers', 
    'controller' => 1, 
    'action'  => 2 
]); 

// for a backend route with a controller/action/parameter 
$backend->add('/([a-zA-Z\-]+)/([a-zA-Z\-]+)/:params', [ 
    'module'  => 'backend', 
    'namespace' => 'Apps\Backend\Controllers', 
    'controller' => 1, 
    'action'  => 2, 
    'params'  => 3 
]); 

// add your backend routes to the main router. 
$router->mount($backend); 
+0

danke für Ihre Antwort. Was ist theses Parameter 1, 2, 3 für die Controller-Aktion usw. Ich verstehe nicht – John

+1

Überprüfen Sie https://docs.phalconphp.com/en/latest/reference/routing.html - für weitere Informationen darüber ... aber es ist so etwas wie eine Karte der Route - Sie definieren, welchen Teil - wie man es nennt. Zum Beispiel ist 1 der Controller und wird vom ersten Teil "/ ([a-zA-Z \ -] +) /" abgerufen. Es gibt ein paar Möglichkeiten, Ihre Routen zu beschreiben. –

+0

Überprüfen Sie den Link @BorisDelev zur Verfügung gestellt, es erklärt, wie der Phalcon-Router eine bestimmte URL übersetzt – Timothy

0

Ich benutze das gleiche Szenario wie Sie. Es müssen nicht alle möglichen Routen definiert werden. Hier sind meine Wege und sie sind universell für alles, was ich im CMS-Bereich benötigen:

// Frontend routes 
// .... 

// CMS Routes 
$router->add('/cms', [ 
     'module' => 'backend', 
     'controller' => 'admin', 
     'action' => 'login' 
     ]); 

$router->add('/cms/:controller/:action/([0-9]+)/:params', [ 
     'module' => 'backend', 
     'controller' => 1, 
     'action' => 2, 
     'id' => 3, 
     'params' => 4 
     ])->setName('backend-full'); 

$router->add('/cms/:controller/:action', [ 
     'module' => 'backend', 
     'controller' => 1, 
     'action' => 2 
     ])->setName('backend-short'); 

$router->add('/cms/:controller', [ 
     'module' => 'backend', 
     'controller' => 1, 
     'action' => 'index' 
     ]); 
Verwandte Themen