Использование PHP для выполнения подзапроса на том же сервере - PullRequest
2 голосов
/ 04 ноября 2011

У меня есть приложение REST на моем сервере.Например, если вы отправите запрос с помощью метода DELETE в «/ users / 3», он удалит пользователя с идентификатором 3.

Но теперь я хотел бы создать «клиент» HTML для этого приложения.,Например, есть форма HTML, и когда вы отправляете ее, пользователь удаляется.К сожалению, вы не можете написать <form method="delete" action"/users/3">, потому что только GET и POST поддерживаются формами.И даже если бы вы могли, я бы хотел, чтобы пользователь был перенаправлен на страницу «операция выполнена успешно» или на страницу «произошла ошибка», что было бы невозможно.

Я подумал об использовании AJAX, ноМне нужно поддержать [вставьте здесь некорректный комментарий] людей, которые деактивировали Javascript

. Я мог изменить приложение, чтобы отправлять POST-запросы с method=DELETE&redirect=/successpage&redirectfail=/failpage, но это займет много времени.

Есть ли способ отправить запрос POST на страницу PHP, который, в свою очередь, переведет его в реальный запрос, затем интерпретирует код состояния, возвращенный моим приложением, и выполнит соответствующее перенаправление?

СпасибоВы

РЕДАКТИРОВАТЬ: я не использую какие-либо рамки для приложения.Сначала это было очень простое приложение, и со временем оно стало более сложным

Ответы [ 5 ]

3 голосов
/ 04 ноября 2011

Вы можете использовать PHP HttpRequest :: send для этого.Вы не можете отправить его напрямую через форму, но вы можете написать PHP-скрипт для этого в ответ на отправку html-формы.

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

2 голосов
/ 04 ноября 2011

Будьте ОЧЕНЬ осторожны - выполнение собственных запросов может привести к взаимоблокировкам при использовании файловых сеансов. Родительский сценарий загрузит / заблокирует сеанс, а затем выполнит подзапрос другого сценария, который пытается запустить сам сеанс. Родительский сценарий заблокировал сеанс, поэтому подзапрос будет зависать до тех пор, пока сеанс не станет доступным ... но сеанс никогда не станет доступным, поскольку родительский объект ожидает завершения подзапроса.

1 голос
/ 04 ноября 2011

Это можно сделать, используя CURL-запрос к вашему REST API:

См. Параметр CURLOPT_CUSTOMREQUEST:

Выборочный метод запросавместо «GET» или «HEAD» при выполнении HTTP-запроса.Это полезно для выполнения «УДАЛИТЬ» или других, более неясных 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);

Так что этодействовать в целевом файле формы после того, как форма была помещена в него.

0 голосов
/ 04 ноября 2011

Вы можете отправить POST в / users / 3, но в вашей форме есть скрытое поле:

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

Тогда в ваших сценариях вы можете просто проверить, существует ли он и удаляется ли и запустить его сценарийсоответственно.Приятной особенностью этого метода является то, что становится легко добавлять «put», поскольку вы просто меняете значение в форме.

0 голосов
/ 04 ноября 2011

Почему бы просто: <form method="post" action"/users/3">, который отправит запрос на пользовательскую страницу (информация отправляется в действии, а не в POST).«Удалить» из ваших /users/3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...