私はかなり新しいzendフレームワークです。私はZend_Rest_Controllerを使ってRESTfulなコントローラを書くことを試みてきました。私は良いチュートリアルから作成した http://www.techchorus.net/create-restful-applications-using-zend-framework それは完全に動作します。そこで、私は既存のzendアプリケーションに追加しました。私はちょうど1つのコントローラをRESTfulにしたいので、ブートストラップに必要な変更を加えました。zend restコントローラは特定のコントローラにルーティングします
protected function _initRestRoute()
{
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($frontController, array() , array('default' => array('MyserviceController')));
$frontController->getRouter()->addRoute('rest', $restRoute);
}
私はMyserviceControllerからインデックスメソッドを呼び出すことになっているURL http://localhost/projectname/public/index.php/myserviceを使用してサービスにアクセスしようとすると、サーバーは、500内部サーバーエラーをスローします。アプリケーションは、このプロジェクト
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpSettings.date.timezone = "America/New_York"
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
includePaths.helpers = APPLICATION_PATH "/views/helpers"
;Module support
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultModule = "default"
resources.modules[] = ""
resources.db.adapter = PDO_MYSQL
resources.db.params.host = ********
resources.db.params.username = *********
resources.db.params.password = *********
resources.db.params.dbname = *********
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
このMyserviceController.phpで
<?php
class MyserviceController extends Zend_Rest_Controller
{
public function init()
{
parent::init();
$this->_helper->viewRenderer->setNoRender(true);
}
public function indexAction() {
$this->getResponse()->setBody('Hello World');
$this->getResponse()->setHttpResponseCode(200);
}
public function getAction() {
$this->getResponse()->setBody('Foo!');
$this->getResponse()->setHttpResponseCode(200);
}
public function postAction() {
$this->getResponse()->setBody('resource created');
$this->getResponse()->setHttpResponseCode(200);
}
public function putAction() {
$this->getResponse()->setBody('resource updated');
$this->getResponse()->setHttpResponseCode(200);
}
public function deleteAction() {
$this->getResponse()->setBody('resource deleted');
$this->getResponse()->setHttpResponseCode(200);
}
}
?>
あなた '.htaccess'ファイルの "開発" にどこZend Frameworkの書き換えルール500 Internal Server Errorではなく、エラーの完全なスタックトレースが表示されるはずです。パブリックディレクトリのApacheエラーログまたはerror_logファイルを調べて、そこにエラー情報が出力されているかどうかを確認することもできます。 – drew010
@ drew010ありがとうございます。私が開発に切り替えた直後に、追加したコードやその他の設定に間違いがないと思ったので、既存のアプリケーションの他の問題が原因でした。そしてこれは私がZend_Rest_Controllerについて多くのことを学んだためです。これはプラスの点です。今は完璧です。 – biker46s