簡體   English   中英

解析網址以獲取Kohana 3中的控制器和操作

[英]parse url to get controller and action in Kohana 3

我在檢測Kohana 3中引薦頁面的控制器/動作名稱時遇到問題。

我要做的是檢測引薦來源頁面是來自內部頁面還是外部頁面。如果它是外部頁面(例如,來自google),我將進行一些默認設置。 如果它是內部引薦來源網址(即來自同一域),我需要根據該引薦來源頁面的控制器和操作信息執行其他操作。

我從檢查$ _SERVER [“ HTTP_REFERRER”]開始,但是我堅持從該變量獲取控制器和動作名稱。 由於我在引導程序中自定義了路線,因此我希望獲得相同的路線

我知道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;
 }

您不應該使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM