Максимум.параметры на маршруте Кохана - PullRequest
0 голосов
/ 21 декабря 2011
Route::set('category', 'category/date/<id>(/<year>)', array('id' => '[0-9]+', 'year' => '[0-9]+'))
->defaults(array(
        'controller' => 'category',
        'action' => 'date',
    ));

Есть ли ограничение для параметров на маршруте Kohana 3.2?

Я реализовал этот маршрут в моем загрузчике, но каждый раз, когда я пытаюсь передать значение year, я получаю ошибку 404!

Только передача идентификатора работает нормально.

Я что-то пропустил?

Это действие контроллера для обработки этого маршрута:

public function action_date() {
    $id = $this->request->param('id');
    $year = $this->request->param('year');
    if(!isset($year) && $year == ""){
        $year = date("Y", time());
    }
    //Do fancy stuff here... and hand it to the view!
}

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

Нет, ограничений нет.Убедитесь, что этот маршрут выше вашего маршрута по умолчанию (или удалите маршрут по умолчанию все вместе).

1 голос
/ 13 января 2012

Кохана должна направить это к правильному действию, и это делает для меня.Я предполагаю, что вы либо перезаписываете этот маршрут тем, который также называется «категория», либо ему сопоставляется другой маршрут, действие которого вызывает Kohana_Exception_404.

Вы должны иметь возможность отклонить / проверить, выброшен ли Kohana_Exception_404 изметод путем просмотра трассировки стека.

Имена маршрутов используются в качестве имен ключей для массива, в котором хранятся маршруты, как показано ниже.Использование одного и того же имени дважды перезапишет предыдущий маршрут, который был под этим именем.

public static function set($name, $uri_callback = NULL, $regex = NULL)
{
    return Route::$_routes[$name] = new Route($uri_callback, $regex);
}

Вы можете использовать следующее в действии где-нибудь, чтобы увидеть все маршруты, используемые для маршрутизации: $this->response->body(Debug::vars(Route::all())); Затем вы можете проверить скомпилированное регулярное выражение для маршрута 'category' или аналогичного.

0 голосов
/ 22 декабря 2011

Попробуйте сделать не опциональным (уберите скобки) и посмотрите, будет ли оно работать тогда. Кроме того, похоже, что в вашем коде есть логическая ошибка. В исходном коде всегда будет установлен $ year, поэтому оператор if всегда пропускается. Попробуйте заменить оператор if и строку перед ним на:

$year = $this->request->param('year', date('Y'));

О, и в качестве бонуса Брюси date () по умолчанию использует текущую временную метку, поэтому дополнительный вызов time () не нужен. Надеюсь, что это работает для вас сейчас.

...