2010-08-01 36 views
1

在我的課,AController,我有以下方法:這是檢查REQUEST_METHOD的可靠方法嗎?

private function determineRequestMethod() 
{ 
    if($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
    $this->requestMethod = AController::POST; 
    } 
    else 
    { 
    $this->requestMethod = AController::GET; 
    } 
} 

這種方法是從構造函數調用。 POSTGET是類常量,requestMethod是類變量。

PS - $_SERVER['REQUEST_METHOD']可以在我的服務器上工作。

我已經更新了方法專門檢查GET,並拋出一個異常時,請求方法不是GETPOST

private function determineRequestMethod() 
{ 
    if($_SERVER['REQUEST_METHOD'] == AController::POST) 
    { 
     $this->requestMethod = AController::POST; 
    } 
    else if($_SERVER['REQUEST_METHOD'] == AController::GET) 
    { 
     $this->requestMethod = AController::GET; 
    } 
    else 
    { 
     throw new Exception('Unexpected request method [' . $_SERVER['REQUEST_METHOD'] . '].'); 
    } 
} 
+3

有[不止方法只是GET和POST(http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5。 1.1)。 – Gumbo 2010-08-01 15:52:18

+0

@Gumbo - 謝謝! – 2010-08-01 16:11:04

+1

你也可以使用'self :: POST'和'self :: GET',因爲這個方法存在於同一個'AController'類中,但我想你寫的類名是爲了清晰起見,這也很好:) – BoltClock 2010-08-01 16:25:15

回答

2

是的,它是realiable,你可以真正做到:

private function determineRequestMethod() 
{ 
    if($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
    $this->requestMethod = AController::POST; 
    } 
    elseif($_SERVER['REQUEST_METHOD'] == 'GET') 
    { 
    $this->requestMethod = AController::GET; 
    } 
} 

如果你的類還支持其他的方法,你可能希望把它放在else條件,否則你的代碼是好的。

PS - $ _SERVER ['REQUEST_METHOD']確實 在我的服務器上工作。

應該在其他地方工作過:)

1

我不知道任何其他方式來檢查請求方法在PHP中,所以我會說這是。你可能想要注意諸如HEAD和其他HTTP動詞之類的東西 - 把它們當作GET來處理,可能並不是你想要的。

+0

謝謝這是一個很好的觀點。我調整了我的方法以反映您的建議。 – 2010-08-01 17:08:26

-1

爲什麼在PHP中有一個優秀的原生輸入過濾器時會使生活複雜化:filter_input()

+0

-1因爲OP從未說過有關輸入變量或過濾的任何內容,這與檢查各種HTTP請求方法是完全不同的域。 – BoltClock 2010-08-01 16:25:30

+0

Dammit,難以根據開關情況切換REQUEST_METHOD並返回輸入過濾器嗎?開關($ _SERVER ['REQUEST_METHOD']) case'GET':return filter_input_array(INPUT_GET); case'POST':return filter_input_array(INPUT_POST); 默認值:return array(); } – Otar 2010-08-02 09:49:14

相關問題