解析网址以获得Kohana 3中的控制器和操作

时间:2011-01-19 05:02:30

标签: php url controller kohana action

我在Kohana 3中检测引荐来源页面的控制器/操作名称时遇到问题。

我要做的是检测引荐来源页面是来自内部还是外部。如果它是外部的(例如来自谷歌),我会做一些默认设置。如果它是内部引用者(即来自同一域),我需要根据该引用者页面的控制器和动作信息做一些不同的事情。

我从检查$ _SERVER [“HTTP_REFERRER”]开始,但我坚持从该变量中获取控制器和操作名称。由于我在bootstrap中定制了路由,我希望得到相同的

我知道Kohana提供了获取当前请求的控制器和操作的方法。

$this->request->controller
$this->request->action
$this->request->param('paramname')

虽然我们想知道是否有方法可以解析给定的URL字符串并返回控制器/操作/参数信息。

任何想法??

更新:

在Kohana源代码中进行了数小时的研究后,我发现了一个分为两个步骤的解决方案:

步骤1.将URL转换为URI。如果它来自外部引用者,则URI应为NULL。

function URL2URI($URL)
{
    if (empty($URL)) return NULL;
    $url_info = parse_url($URL);
    if (!isset($url_info['host']) || !isset($url_info['path'])) return NULL;
    return ($url_info['host'] === $_SERVER['HTTP_HOST']) ? ltrim($url_info['path'], '/') : NULL;
}

步骤2.使用所有路由测试URI并从路径中获取与URI匹配的信息($ match ['controller'],$ match ['action'])。

function getInfoFromURI($URI)
{
     if (empty($URI)) return NULL;    
     $routes = Route::all();
     foreach ($routes as $oneRoute)
     if ($match = $oneRoute->matches($URI))
          return $match;    
     return NULL;
 }

1 个答案:

答案 0 :(得分:1)

你不应该使用:

$controller = Request::factory($your_url_without_http)->controller;
$action = Request::factory($your_url_without_http)->action;