2011-11-04 70 views
2

我有我的服務器上現有的REST應用的子請求。 例如,如果使用DELETE方法向「/ users/3」發送請求,它將刪除標識爲3的用戶。使用PHP做同樣的服務器

但是現在我想爲此應用程序創建一個HTML「客戶端」。例如有一個HTML表單,當你提交它時,用戶被刪除。 不幸的是,你可以不寫<form method="delete" action"https://stackoverflow.com/users/3">因爲只有GET和POST由形式的支持。即使可以,我希望將用戶重定向到「成功的操作」或之後的「出現錯誤」頁面,這是不可能的。

我考慮過使用AJAX,但我需要[這裏插入injurous評論]支持誰Javascript處於隱身狀態

我可以修改應用程序,這樣我就可以發送POST請求與method=DELETE&redirect=/successpage&redirectfail=/failpage但會採取了大量的時間人。

有沒有一種方法來發送POST請求的PHP頁面,這又將其轉化爲真正的請求,然後將其解釋通過我的應用程序返回的狀態代碼,並做相應的重定向?

謝謝

編輯:我沒有使用任何框架的應用程序。這是在開始時非常簡單的應用程序,並隨着時間的推移

+0

您是否在爲PHP應用程序使用框架?哪一個? –

回答

1

這可以使用CURL request到您的REST API來完成:做一個 時

自定義請求的方法來使用,而不是「GET」或「HEAD」:

CURLOPT_CUSTOMREQUEST選項HTTP請求。這對於執行「DELETE」或其他更晦澀的HTTP請求很有用。有效值是諸如「GET」,「POST」,「CONNECT」等等的東西;即不要在此輸入整個HTTP請求行。對於 例如,輸入 「GET /index.html HTTP/1.0 \ r \ n \ r \ n」 個將是 不正確。

例如:

$ch = curl_init('http://localhost/upload.php'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');  
curl_exec($ch); 

因此,這將在表格後形式的目標文件付諸行動已經貼在上面。

3

您可以使用PHP的的HttpRequest ::發送要做到這一點變得更加複雜。你不能直接通過表單發送它,但你可以寫一個PHP腳本來響應發送html表單。

http://php.net/manual/de/function.httprequest-send.php

+1

這將使用方法的'HTTP_METH_DELETE'常量。 – Treffynnon

+0

謝謝,我接受cURL的答案,因爲它帶有PHP – Tomaka17

+0

@entek:沒有看到這個擴展名,謝謝。 –

0

爲什麼不乾脆:<form method="post" action"https://stackoverflow.com/users/3">這將請求發送到定製頁面(信息被在行動派,而不是在POST)。 '刪除'來自/ users/3。

+0

你會如何區分更新操作? –

2

很詳細小心 - 使用基於文件的會話時,執行自我請求會導致死鎖。父腳本將加載/鎖定會話,然後對另一個腳本執行子請求,該腳本會嘗試啓動會話本身。父腳本已經鎖定了會話,因此子請求將掛起,直到會話可用...但因爲父母正在等待子請求,以便完成會話將永遠不會變得可用。

+0

假設這是一個REST風格的應用程序,狀態(會話)只存在於客戶端。 –

+0

nikc是正確的,我使用HTTP認證。無論如何,謝謝你的信息,我不會想到它。我忘了談論它,但這是另一個不使用表單發送POST請求的參數 – Tomaka17

+0

啊,這個答案幫了我很多! – emfi

0

您可以張貼到/用戶/ 3,但在你的形式包括一個隱藏字段:

<input type="hidden" name="_method" value="delete"> 

然後在你的腳本,你可以只檢查是否存在,並刪除,並相應地運行該腳本。這種方法的好處在於,添加「put」也變得很容易,因爲您只需更改表單中的值即可。

相關問題