I'm trying to bind those url to the same route :
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 to all 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.