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
86
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 8 anni fa
Andrea Turso
Andrea Turso
86
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 8 anni fa
Gianni Tomasicchio
X 0 X

:punk: :death:

thanks Gianni.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
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 8 anni fa
Andrea Turso
Andrea Turso
86
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 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

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

:bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

:death: chiedo venia

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