4

私はかなり新しい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); 
    } 
} 
?> 
+0

あなた '.htaccess'ファイルの "開発" にどこZend Frameworkの書き換えルール500 Internal Server Errorではなく、エラーの完全なスタックトレースが表示されるはずです。パブリックディレクトリのApacheエラーログまたはerror_logファイルを調べて、そこにエラー情報が出力されているかどうかを確認することもできます。 – drew010

+0

@ drew010ありがとうございます。私が開発に切り替えた直後に、追加したコードやその他の設定に間違いがないと思ったので、既存のアプリケーションの他の問題が原因でした。そしてこれは私がZend_Rest_Controllerについて多くのことを学んだためです。これはプラスの点です。今は完璧です。 – biker46s

答えて

-1

のコードのためののapplication.iniある

application/ 
    configs/ 
     application.ini 
    controllers/ 
     IndexContoller 
     OneController 
     TwoController 
     Myservice 
    forms 
    layouts 
    models 
    modules/ 
     app1module 
     app2module 
     app3module 
    views 
    Bootstrap.php 

次のフォルダ構造を有しています"localhost/projectname/public/index.php/myservice"なぜ使用してindex.php、なぜか/index/

ZFのデフォルトのURL構造である "ます。http://ホスト名/コントローラ/アクション/ parametes" あなたはあなたのAPPLICATION_ENVを設定した場合

+0

はい、ZFのURL構造は「http:// hostname/controller/action/parameters」ですが、代わりに明示的にアプリケーションのエントリポイント、つまりindex.phpを指定してから、コントローラを指定することもできます。 – biker46s

関連する問題