Zend 1.12 Rest PUT метод не допускается

71
8

Поскольку я перешел на AWS и обновился до PHP 5.4 и Zend 1.12, у меня возникла проблема с методами PUT & DELETE.

Быстрый пример:

/** Zend 1.12 **/

/** бутстрап/маршруты **/

$front = \Zend_Controller_Front::getInstance();
$front->setParam('bootstrap',$this);
//REST API
$router = $front->getRouter();
$restRoute = new Zend_Rest_Route($front, array(), array(
'default' => array('rest'),
));
$router->addRoute('rest', $restRoute);

/** restController **/

//module : default 

class RestController extends \Zend_Rest_Controller
public function init(){
parent::init();
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();
}
public function headAction(){}

public function indexAction()
{
Throw new AppException(Translator::translate('index not yet implemented...'));
}
public function getAction()
{
die('get');
}
public function putAction(){
die('put');
}

/* TestCase */

curl -X GET http://XXXX/rest/MS4xMjU2LjEyNTguMTI2MS4tbW9kZWxzXGNvcmVcbW9kZWxcZXhlcmNpc2VcZXhlcmNpc2VfcXVlc3Rpb24tMTQy

Результат: get ===> OK

curl -X PUT http://XXXX/rest/MS4xMjU2LjEyNTguMTI2MS4tbW9kZWxzXGNvcmVcbW9kZWxcZXhlcmNpc2VcZXhlcmNpc2VfcXVlc3Rpb24tMTQy

Результат:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for the URL /index.php.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at XXXXX Port 80</address>
</body></html>

===> Не в порядке

Мне не нужно использовать плагин Apache для WebDav (или другого), чтобы включить запрос PUT/DELETE. Обработчик PHP имеет дело с этим, а не с Apache. Итак, почему GET в порядке, а PUT нет? Почему Apache что-то говорит о index.php вместо /rest/RestController.php?

Я видел, что Zend обновляет свой Zend_Rest_Controller с 1.12. Теперь я должен объявить функцию "headAction", но я не нашел документацию по этому вопросу...

Если у вас есть идея...

Благодаря,

спросил(а) 2012-10-17T02:38:00+04:00 8 лет назад
1
Решение
70

Вероятно, проблема кроется в конфигурации Apache. Может быть, вам стоит пойти и добавить что-то вроде

<Directory />
AllowOverride All
<Limit GET HEAD POST PUT DELETE OPTIONS>
Order Allow,Deny
Allow from all
</Limit>
</Directory>

к вашей конфигурации apache.

Проверьте этот ответ.

ответил(а) 2012-10-17T09:36:00+04:00 8 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема