atomik icon indicating copy to clipboard operation
atomik copied to clipboard

Can't get parameters' default value to work

Open zessx opened this issue 10 years ago • 1 comments

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 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.

zessx avatar Mar 26 '14 09:03 zessx

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.

adaniello avatar Apr 10 '14 20:04 adaniello