【问题标题】:ZF2: Using JSON-RPC without MVC?ZF2:在没有 MVC 的情况下使用 JSON-RPC?
【发布时间】:2014-06-27 19:43:49
【问题描述】:

ZF2 文档以及 Matthew Weier O'Phinney 的博客中指出:

许多开发人员希望将其直接粘贴到他们的 MVC 应用程序中, 为了有漂亮的网址。但是,框架团队通常 建议不要这样做。提供 API 时,您希望响应 尽快返回,服务器基本上 在他们的设计中封装 Front Controller 和 MVC 模式, 没有充分的理由重复流程和添加流程 开销。

建议您将服务器端点放在公共目录结构中。例如,您可能有 /public/some-api.php 实例化并运行 Zend RPC 服务器。但是我已经创建了这个 dope 模块,其中我有一堆类和一个配置文件,其中列出了用于创建类的依赖注入、工厂等。

Soo...如何在我的 RPC 服务器中利用该代码,而不将其放入 MVC 控制器?

谢谢! 亚当

【问题讨论】:

  • 这听起来像是旧闻。有该博文的链接吗?

标签: zend-framework2 json-rpc


【解决方案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();
}

如您所见,我正在使用服务管理器!耶。世界上一切都很好。

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2010-10-23
    • 2017-03-14
    • 2015-01-13
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多