[英]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.