ZF2文档以及Matthew Weier O' Phinney的博客中说明:
许多开发人员希望直接将其粘贴在他们的MVC应用程序中, 为了拥有漂亮的网址。但是,框架团队通常 建议不要这样做。在提供API时,您需要响应 尽快返回,基本上作为服务器 将Front Controller和MVC模式封装在他们的设计中, 没有理由重复流程和添加处理 开销。
建议您将服务器端点放在公共目录结构中。例如,您可能有/public/some-api.php实例化并运行Zend RPC Server。但是我已经创建了这个dope模块,其中我有一堆类和一个配置文件,它用于创建类的依赖注入,工厂等。
Soo ...如何在我的RPC服务器中利用该代码,而不将其放入MVC控制器?
谢谢! 亚当
答案 0 :(得分: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();
}
如您所见,我正在使用服务管理器!好极了。一切都在世界上。