2014-05-09 6 views
0

, 그 :ZF2 : MVC없이 JSON-RPC를 사용 하시겠습니까? 그것은뿐만 아니라 마태 복음 WEIER O'Phinney의 블로그에 의해 ZF2 문서에 명시되어

많은 개발자들이 꽤 URL이하기 위해, 직접 MVC 응용 프로그램에서 을이 충실하고 싶다. 그러나 프레임 워크 팀은 일반적으로 을 권장합니다. API를 제공 할 때 에 대한 응답을 가능한 빨리 반환하고 서버에 기본적으로 프런트 컨트롤러와 MVC 패턴을 캡슐화하면 오버 헤드가 발생하여 처리를 복제하고 오버 헤드 처리 을 추가 할 필요가 없습니다.

공용 폴더 구조에 서버 끝점을 배치하는 것이 좋습니다. 예를 들어 젠드 RPC 서버를 인스턴스화하고 실행하는 /public/some-api.php가있을 수 있습니다. 그러나 나는 클래스를 만드는 데 필요한 의존성 삽입, 공장 등을 배치하는 설정 파일과 묶음이있는이 마약 모듈을 이미 만들었습니다.

Soo ... RPC 서버에서 MVC 컨트롤러에 넣지 않고 어떻게 코드를 활용할 수 있습니까?

감사합니다. 아담

+0

오래된 뉴스 일 수 있습니다. 해당 블로그 게시물에 대한 링크가 있습니까? – dualmon

답변

1

다음은 내가 한 것입니다. 나는이 몇 개의 파일로 세분화했다,하지만 당신은 공개 루트 디렉토리에이 모든 것을 넣을 수 있습니다, RPC-service.php 같은 : 당신이 볼 수 있듯이

use Zend\ServiceManager\ServiceManager, 
    Zend\Mvc\Service\ServiceManagerConfig; 

class Bootstrap { 
    /** @var ServiceManager */ 
    private static $serviceManager; 

    private static function _go() { 
     chdir(dirname(__DIR__)); 

     require __DIR__ . '/../init_autoloader.php'; 

     $config = include __DIR__ . '/../config/application.config.php'; 

     $serviceManager = new ServiceManager(new ServiceManagerConfig()); 
     $serviceManager->setService('ApplicationConfig', $config); 
     $serviceManager->get('ModuleManager')->loadModules(); 

     self::$serviceManager = $serviceManager; 
    } 

    /** 
    * @return ServiceManager 
    */ 
    public static function getServiceManager() { 
     if (!self::$serviceManager) 
      self:: _go(); 

     return self::$serviceManager; 
    } 
} 

$sm = Bootstrap::getServiceManager(); 

use Zend\Json\Server\Server, 
    Zend\Json\Server\Smd, 

$jsonRpc = new Server(); 
$jsonRpc->setClass($sm->get('Some\Class')); 
$jsonRpc->getRequest()->setVersion(Server::VERSION_2); 

if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
    echo $jsonRpc->getServiceMap()->setEnvelope(Smd::ENV_JSONRPC_2); 
} 
else { 
    $jsonRpc->handle(); 
} 

, 나는 서비스 관리자를 사용하고 있습니다! 예. 모든 것이 세상에 있습니다.