Маршрутизация запросов AJAX в Kohana 3? - PullRequest
0 голосов
/ 15 октября 2011

В моем bootstrap.php у меня есть следующий код:

// Check if ajax request
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest")
{
    Route::set('ajax', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'home',
        'action'     => 'index',
    ));
}

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'home',
        'action'     => 'index',
    ));

Маршрут 'ajax' неполон.Что я хочу сделать, это если запрос выполняется через.ajax, тогда Kohana должна искать контроллер в подпапке внутри моих контроллеров под названием ajax /.Итак, если запрос ajax, то:

http://localhost/myproject/somecontroller/someaction маршрутизирует некоторый контроллер внутри подпапки ajax. Если нет ajax, тогда просто используйте маршрут по умолчанию.

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Используйте лямбда / функцию / метод обратного вызова примерно так:

Route::set('ajax', function($uri)
    {
        if (Request::$current->is_ajax() AND $params = Route::get('default')->matches($uri))
        {
            $params['directory'] = 'ajax';
            return $params;
        }
    },
    '(<controller>(/<action>(/<id>)))'
);

См. http://kohanaframework.org/3.2/guide/kohana/routing и http://kohanaframework.org/3.2/guide/api/Route

1 голос
/ 15 октября 2011

Попробуйте это:

Route::set('ajax', '(<controller>(/<action>(/<id>)))')
->defaults(array(
    'directory'  => 'ajax',
    'controller' => 'home',
    'action'     => 'index',
));

Однако лично я обработал бы запросы AJAX и не AJAX в одном контроллере, используя Request::current()->$is_ajax, чтобы определить, был ли это запрос AJAX. Поведение AJAX, вероятно, существенно не отличается от поведения без AJAX, поэтому может быть полезно хранить оба в одном контроллере. Вы можете столкнуться с дублированием кода, если обрабатываете запросы AJAX на другом контроллере.

...