Router

Gianni sto utilizzando Zend_Controller_Router_Rewrite per poter usare una struttura modulare di questo tipo :

/:locale/:modulo/:controller/:azione

il codice è quest

<?php
    $frc = Zend_Controller_Front::getInstance();   
    $router = new Zend_Controller_Router_Rewrite();
    $router->addRoute(null, new Zend_Controller_Router_Route(':locale/:module/:controller/:action'));    
    $router->addRoute(null, new Zend_Controller_Router_Route(':locale/:module/:controller'));
    $router->addRoute(null, new Zend_Controller_Router_Route(':locale/:module'));
    $router->addRoute(null, new Zend_Controller_Router_Route(':locale'));

    $frc->addModuleDirectory(ROOT . 'app/modules')
        ->setRouter($router)
        ->registerPlugin(new Solemare_Plugin_Translate())
        ->setParam('noViewRenderer', true)
        ->setParam('useDefaultControllerAlways', true)
        ->dispatch(); 

Tutto sembra andare bene, il locale è valorizzato, sto usando un plugin che in predispatch controlla che il file di linguaggio esista e nel caso esista crea un'istanza di Zend_Translate e la registra in Zend_Registry.

Il problema è quando l'url non è completo!

mi da sempre errore!

io ho bisogno di avere degli url così:

/en/ :

locale == en

module == default

controller == index

action == index

/en/default/catalog/ o /en/catalog/ :

locale == en

module == default

controller == catalog

action == index

omettendo una delle parti dell'url ora mi porta all'errorController.

PS : Con un echo nel plugin ho notato che viene eseguito due volte, come mai?

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

Prova a mettere solo questa regola:

$router->addRoute(null, new Zend_Controller_Router_Route(':locale/:module/:controller/:action'),
    array('locale' == 'en',
              'module' == 'default',
              'controller' == 'index',
              'action' == 'index'));

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gianni in questo modo mi riconosce solo gli url :

/locale/modulo/controller/azione

ma non :

/locale/controller/azione (modulo: default)

/locale/controller/ (modulo:default, azione:index)

/locale/ (modulo:default, controller:index, azione:index)

risposto 9 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

Mea culpa, ho fatto qualche errore... guarda qui:

$fc = Zend_Controller_Front::getInstance();
$fc->setControllerDirectory(array('default' => '../application/default/controllers',
                                                     'admin' => '../application/admin/controllers'));
$fc->throwExceptions(true);

$router = $fc->getRouter();
    
$route = new Zend_Controller_Router_Route(
    ':locale/:module/:controller/:action/*',
    array('locale'       => 'en',
              'module'    => 'default',
              'controller' => 'index',
              'action'      => 'index')
);

$router->addRoute('default', $route);

$fc->dispatch();

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

 :punk: :death:

thanks Gianni.

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

Avrò guardato la documentazione per una cinquina di ore, e non mi sono mai accorto che il parametro per i default non andava ad addRoute ma al costruttore della route :2funny: li odio questi errori bastardi :D

risposto 9 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

Ah Gianni, ma questo modo mi inibisce l'error controller?

provando url a caso mi mostra sempre il (default/index/index) e non l'error controller ...

EDIT: ok l'error controller funziona :D viene chiamato.

Qualche dritta per richiamarlo dallo script in caso di errore ?

e.g.: un plugin per il caricamento della lingua, se il linguaggio non esiste mi invia all'error controller ($this->_forward ? )

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
96
modificato 9 anni fa
X 0 X

Hei trashofmasters, che fai, mi vai in OT? Non è da te!  ;D

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

:death: chiedo venia

risposto 9 anni fa
Andrea Turso
Andrea Turso
96
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda