Kohana 3.1.1. Проблема маршрутизации с вкладками jQuery - PullRequest
2 голосов
/ 06 мая 2011

Чтобы задать свой вопрос, мне нужно сначала объяснить мой код ...

У меня есть контроллер (Controller_App), который расширяет Controller_Template. В представлении шаблона контроллера у меня есть вкладки jQuery с 3 вкладками. Когда я получаю доступ к URI: /view/26, включается следующий маршрут:

Route::set('view_story', '<action>/<id>(/<stuff>)', array(
    'action'    => 'view',
    'id'        => '\d+',
    'stuff'     => '.*',
))
->defaults(array(
    'controller' => 'app',
));

Затем вызывается следующая функция в Controller_App, которая устанавливает URI вкладки jQuery «Исследовать» и делает ее выбором по умолчанию:

public function action_view($id)
    {
        $this->template->controller['explore'] = Route::get('explore')
            ->uri(array(
                'controller' => 'explore',
                'id'         => $id,
            ));
        $this->template->default_tab = 2;
    }

Вот мой маршрут "изучения":

Route::set('explore', '<controller>/<id>', array(
    'controller'    => 'explore',
    'id'            => '\d+',
))
->defaults(array(
    'action'    => 'index',
));


Проблема:
Когда я пытаюсь получить доступ к истории с помощью URL: «myhost.com/view/26», он все устанавливает, но думает, что «/ view» - это каталог, поэтому пытается вызвать «myhost.com/view/». explore / 26. Поскольку нет контроллера с именем view, я получаю ошибку 404. Мне удалось обойти ошибку 404, создав следующий маршрут:

Route::set('explore', '(<directory>/)<controller>/<id>', array(
    'directory'     => 'view',
    'controller'    => 'explore',
    'id'            => '\d+',
))
->defaults(array(
    'directory' => '',
    'action'    => 'index',
));

... а затем изменив мою функцию на:

public function action_view($id)
    {
        $this->template->controller['explore'] = Route::get('explore')
            ->uri(array(
                'directory'  => '',
                'controller' => 'explore',
                'action'     => 'index',
                'id'         => $id,
            ));
        $this->template->default_tab = 2;
    }

Но когда страница загружается, она вызывает jQuery.get (), но пытается вызвать файл PHP в каталоге "/ view" вместо текущего каталога.

Я не знаю, является ли это простой проблемой маршрутизации, или я вообще лаю правильное дерево. Но я перепробовал все разные комбинации маршрутов и не могу понять это. Все предложения приветствуются!

Спасибо, Brian

1 Ответ

0 голосов
/ 12 мая 2011

Route::uri(...) генерирует Uris, которые не являются абсолютными.Переключитесь на использование Route::url(...), и все будет хорошо.

Route::url(...) - это ярлык для передачи Route::uri(...) через URL::site(...).

public function action_view($id)
{
    $this->template->controller['explore'] = Route::get('explore')
        ->url(array(
            'controller' => 'explore',
            'id'         => $id,
        ));
    $this->template->default_tab = 2;
}
...