Za prvo pitanje stvarno ne mogu ništa da ti kažem, jer nikad nisam koristio Lucene.
Što se drugog pitanja tiče, naravno da je tako nešto moguće, ali to je, koliko ja znam, izvodljivo jedino uz pomoć Regex rute, npr.:
To bi bio primer definicije takve rute u okviru ini fajla, a posle naravno bi u bootstrap-u morao da dodaš ovu konfiguraciju ruteru:
Naravno, ovakvu definiciju možeš da dodaš i direktno u tvoj app config, pri čemu bi samo ispred svake stavke dodao resources.router, kako bi naglasio da inicijalizuješ Router app resurs. Ja nekako više volim da rute držim u odvojenom config fajlu.
Primetićeš da u tom prvom subpattern-u "prolazi" i znak "/", a to je upravo iz razloga što je zahtev te tvoje rute takav da je prvi deo opcion, pa nikako ne smeš kosu crtu (url separator) da imaš između ta dva parametra foo i bar, već će parametar foo, ako ga ima, pri assemble-ovanju te rute dodavati kosu crtu na kraj njegove vrednosti. To znači da ćeš pri dohvatanju vrednosti tih parametara, u okviru foo-a imati i tu dodatnu kosu crtu na kraju, a ako ti to smeta, onda istu tu rutu možeš da definišeš i ovako:
Nadam se da ti sintaksa regularnih izraza nije strana, pa ti je verovatno jasno zašto sam stavio ?: na početku tog prvog segmenta kojeg sam označio kao opcionog. U slučaju takve rute, reverse ruta (ona koja se koristi za assemble-ovanje) bi trebala da izgleda ovako: routes.foobar.reverse = %s/%s.
btw Sve ovo pišem iz glave, tako da mi se možda potkrala neka sintaksna/logička greška.
Što se drugog pitanja tiče, naravno da je tako nešto moguće, ali to je, koliko ja znam, izvodljivo jedino uz pomoć Regex rute, npr.:
Code:
routes.foobar.type = "Zend_Controller_Router_Route_Regex"
routes.foobar.route = "([a-zA-Z0-9\-\/]*)([a-zA-Z0-9\-]+)\.html"
routes.foobar.defaults.module = default
routes.foobar.defaults.controller = index
routes.foobar.defaults.action = index
routes.foobar.map.1 = foo
routes.foobar.map.2 = bar
routes.foobar.reverse = %s%s
routes.foobar.type = "Zend_Controller_Router_Route_Regex"
routes.foobar.route = "([a-zA-Z0-9\-\/]*)([a-zA-Z0-9\-]+)\.html"
routes.foobar.defaults.module = default
routes.foobar.defaults.controller = index
routes.foobar.defaults.action = index
routes.foobar.map.1 = foo
routes.foobar.map.2 = bar
routes.foobar.reverse = %s%s
To bi bio primer definicije takve rute u okviru ini fajla, a posle naravno bi u bootstrap-u morao da dodaš ovu konfiguraciju ruteru:
Code:
$routesConfig = new Zend_Config_Ini('/putanja/do/routres_config.ini');
Zend_Controller_Front::getInstance()->getRouter()->addConfig($routesConfig, 'routes');
$routesConfig = new Zend_Config_Ini('/putanja/do/routres_config.ini');
Zend_Controller_Front::getInstance()->getRouter()->addConfig($routesConfig, 'routes');
Naravno, ovakvu definiciju možeš da dodaš i direktno u tvoj app config, pri čemu bi samo ispred svake stavke dodao resources.router, kako bi naglasio da inicijalizuješ Router app resurs. Ja nekako više volim da rute držim u odvojenom config fajlu.
Primetićeš da u tom prvom subpattern-u "prolazi" i znak "/", a to je upravo iz razloga što je zahtev te tvoje rute takav da je prvi deo opcion, pa nikako ne smeš kosu crtu (url separator) da imaš između ta dva parametra foo i bar, već će parametar foo, ako ga ima, pri assemble-ovanju te rute dodavati kosu crtu na kraj njegove vrednosti. To znači da ćeš pri dohvatanju vrednosti tih parametara, u okviru foo-a imati i tu dodatnu kosu crtu na kraju, a ako ti to smeta, onda istu tu rutu možeš da definišeš i ovako:
Code:
routes.foobar.route = "(?:([a-zA-Z0-9\-]+)\/)?([a-zA-Z0-9\-]+)\.html"
routes.foobar.route = "(?:([a-zA-Z0-9\-]+)\/)?([a-zA-Z0-9\-]+)\.html"
Nadam se da ti sintaksa regularnih izraza nije strana, pa ti je verovatno jasno zašto sam stavio ?: na početku tog prvog segmenta kojeg sam označio kao opcionog. U slučaju takve rute, reverse ruta (ona koja se koristi za assemble-ovanje) bi trebala da izgleda ovako: routes.foobar.reverse = %s/%s.
btw Sve ovo pišem iz glave, tako da mi se možda potkrala neka sintaksna/logička greška.