2 Stimmen

Zend 1.12 Rest PUT Methode nicht erlaubt

Seit ich zu AWS migriert bin und auf PHP 5.4 und Zend 1.12 aktualisiert habe, habe ich ein Problem mit den PUT- und DELETE-Methoden.

Ein schnelles Beispiel:

/** Zend 1.12 **/

/** bootstrap / routes **/

$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 **/

//Modul: Standard

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 noch nicht implementiert...'));
}
public function getAction()
{
    die('get');
}
public function putAction(){
 die('put');
}

/* Testfall */

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

Ergebnis: get ===> OK

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

Ergebnis:

405 Method Not Allowed

Methode nicht erlaubt
Die angeforderte Methode PUT ist für die URL /index.php nicht erlaubt.

Apache/2.2.16 (Debian) Server at XXXXX Port 80

\===> Nicht OK

Ich muss kein WebDav (oder anderes) Apache-Plugin verwenden, um PUT/DELETE-Anforderungen zu ermöglichen. Der PHP-Handler kümmert sich darum, nicht Apache. Warum also ist das GET OK und das PUT nicht? Warum sagt Apache etwas über index.php anstatt über /rest/RestController.php?

Ich habe gesehen, dass Zend seinen Zend_Rest_Controller seit 1.12 aktualisiert hat. Jetzt muss ich die "headAction" Funktion deklarieren, aber ich habe keine Dokumentation zu diesem Punkt gefunden...

Wenn Sie eine Idee haben...

Danke,

0voto

akond Punkte 15345

Möglicherweise liegt das Problem in der Apache-Konfiguration.
Vielleicht sollten Sie etwas Ähnliches hinzufügen

    AllowOverride All

        Order Allow,Deny
        Allow from all

zu Ihrer Apache-Konfiguration.

Schauen Sie sich diese Antwort an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X