Philip Iezzi wrote:
We could then set up some static routes to make life a bit easier:
new Zend_Controller_Router_StaticRoute('logout', array('action' => 'logout'));
Instead of calling an ugly "/index/index/logout" URI, we could call "/logout"
and place the logout action directly in /application/controllers/IndexController.php
I'd rather prefer some regular expression to write one single static route for
all requests not matching the :module/:controller/:action layout, something
like:
new Zend_Controller_Router_StaticRoute('!(admin|moderator)', array('module' =>
'index', 'controller' => 'index', 'action' => '$1'));
(totally wrong regex, I know, this is just pseudocode!!)
I'm in the middle of creating new route class called RegexRoute. It will be
able to accomplish what you're trying to do above. It's constuctor signature is:
Zend_Controller_Router_RegexRoute($regex, array $defaults, array $map)
Regex and defaults parameters will be compatible with all other route objects
with one exception => you will be able to define integer indexed defaults in
order to enable it to work with regex subpatterns.
There will be a third optional parameter named $map, which will hold key-value
pairs for mapping subpatterns to named parameters. So to achieve what you have
given example for, you will have to create the route this way:
new Zend_Controller_Router_RegexRoute('!(admin|moderator)',
array('module' => 'index', 'controller' => 'index'),
array(1 => 'action')
);
Or to make it actually work, we have to use conditional matching (or any other
way to simulate the negative match) because there is no negative subpattern
matching mechanism in PHP's PCRE:
$route = new Zend_Controller_Router_RegexRoute('((?!admin|moderator).+)',
array('module' => 'index', 'controller' => 'index'),
array(1 => 'action')
);
And the code is almost complete and this test already passes with the current
code:
public function testNegativeMatch()
{
$route = new Aie_Mvc_LiteRegexRoute('((?!admin|moderator).+)',
array('module' => 'index', 'controller' => 'index'),
array(1 => 'action')
);
$values = $route->match('users');
$this->assertSame(3, count($values));
$this->assertSame('index', $values['module']);
$this->assertSame('index', $values['controller']);
$this->assertSame('users', $values['action']);
}
I yet have to make assembling work (I guess about 70% work is already done) and
create a proposal. Then everything will be in the hands of Matthew.
Philip
--
Michael Minicki aka Martel Valgoerad | [EMAIL PROTECTED] |
http://aie.pl/martel.asc
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
"A paranoid is someone who knows a little of what's going on." -- William S.
Burroughs