在 Kohana 3 中路由 ajax 请求?

发布于 2024-12-09 17:55:08 字数 877 浏览 0 评论 0原文

在我的 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 那么就使用“默认”路由。

In my bootstrap.php I have the following code:

// 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',
    ));

The 'ajax' route is incomplete. What I want to do is if the request is done via. ajax, then Kohana should look for the controller in a subfolder within my controllers called ajax/. So, if ajax request then:

http://localhost/myproject/somecontroller/someaction routes to somecontroller inside the ajax subfolder. If not ajax then just use the 'default' route.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一梦等七年七年为一梦 2024-12-16 17:55:08

使用类似这样的 lambda/callback 函数/方法:

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/routinghttp://kohanaframework.org/3.2/guide/api/Route

Use a lambda/callback function/method something like this:

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>)))'
);

See http://kohanaframework.org/3.2/guide/kohana/routing and http://kohanaframework.org/3.2/guide/api/Route

绿光 2024-12-16 17:55:08

试试这个:

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

但是,就个人而言,我会在同一个控制器中处理 AJAX 和非 AJAX 请求,使用 Request::current()->$is_ajax 来判断它是否是 AJAX 请求。 AJAX 行为可能与非 AJAX 行为没有显着差异,因此将两者保留在同一控制器中可能会有所帮助。如果您在不同的控制器中处理 AJAX 请求,最终可能会出现代码重复。

Try this:

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

However, personally, I'd handle both AJAX and non-AJAX requests in the same controller, using Request::current()->$is_ajax to tell if it was an AJAX request. The AJAX behavior is probably not significantly different to the non-AJAX, so it might be beneficial to keep both in the same controller. You may end up with code duplication if you handle AJAX requests in a different controller.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文