4

젠드 프레임 워크를 처음 접했습니다. 나는 Zend_Rest_Controller를 사용하여 RESTful 컨트롤러를 작성하려고 노력 해왔다. 좋은 튜토리얼에서 하나 만들었습니다. http://www.techchorus.net/create-restful-applications-using-zend-framework 완벽하게 작동합니다. 그래서 나는 기존의 젠드 애플리케이션에 추가했다. 한 컨트롤러가 RESTful이되도록하고 부트 스트랩에 필요한 변경을가했습니다. 내가 MyserviceController에서 인덱스 메소드를 호출하도록되어 URL을 http://localhost/projectname/public/index.php/myservice를 사용하여 서비스에 액세스 할 때젠드 레스트 컨트롤러는 특정 컨트롤러로 라우팅합니다.

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); 
} 

서버는 500 내부 서버 오류를 발생시킵니다. 응용 프로그램은 다음과 같은 폴더 구조

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

이 프로젝트

[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 

에 대한 application.ini하고 의 코드이 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' 파일에서 "개발"에 어디 젠드 프레임 워크 재 작성 규칙 500 내부 서버 오류 대신 전체 스택 추적을 볼 수 있습니다. 아파치 오류 로그 또는 공개 디렉토리의 error_log 파일을 검사하여 오류 정보가 거기에 출력되었는지 확인할 수도 있습니다. – drew010

+0

@ drew010 감사합니다. 개발로 전환하자마자 내가 추가 한 코드 나 다른 구성 설정에는 아무런 문제가 없다고 생각했습니다. 오류는 기존 응용 프로그램의 다른 문제 때문이었습니다. 그리고 예, Zend_Rest_Controller에 대해 많은 것을 배웠습니다. 이제 완벽하게 작동합니다. – biker46s

답변

-1

에있다 "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