atomik
atomik copied to clipboard
Can't get parameters' default value to work
I'm trying to bind those url to the same route :
-
posts
-
posts/2014
I used default values for my :year
parameter, as defined in documentation :
'app' => array(
'routes' => array(
'posts/:year' => array(
'@name' => 'posts',
'action' => 'posts/index',
'year' => 'all',
),
),
),
Here are the results :
Build url | Result |
---|---|
Atomik::url('@posts', array('year'=>2014)) |
domain.tld/posts/2014 |
Atomik::url('@posts') |
domain.tld/posts/:year |
How could we remove this unused/unusable /:year
from the url ?
We should :
- use
Atomik::url('@posts')
without parameter - get
domain.tld/posts
as the rewritten url - get
year
parameter set toall
in our action file
I made an attempt to get it work (see this fork) :
// injects parameters into the url
if (preg_match_all('/(:([a-z0-9_]+))/i', $action, $matches)) {
for ($i = 0, $c = count($matches[0]); $i < $c; $i++) {
if (array_key_exists($matches[2][$i], $params)) {
$action = str_replace($matches[1][$i], $params[$matches[2][$i]], $action);
unset($params[$matches[2][$i]]);
} elseif (array_key_exists($matches[2][$i], $default)) {
// default value is found, remove he related part from url
$action = preg_replace('/:'.$matches[2][$i].'\/?/i', '', $action);
}
}
}
Currently, it remove /:year
from the url, but the action file doesn't receive any year
default value.
As possible side-effects, we must think about people using Atomik without url-rewriting.
This is a very interesting topic: i was forced to specify the default values of the parameters every time i created a url. I hope Maxime can help us to find a solution in the short.