我有一个工厂服务,我想从控制器发送额外的参数,这是我目前的工作方式。
$apiSuccess = new ApiSuccess(array(
'status' => 'success',
'code' => 'user_authenticate_success',
'href' => 'app/welcome',
'message' => 'User Authenticated Successfully'
));
$apiResponse = $this->getServiceLocator()->get('api_response');
$apiResponse->setHttpCode(200);
$apiResponse->setContent($apiSuccess);
$apiResponse->dispatch();
这是我的工厂服务类
class ApiJsonResponseFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
return new ApiJsonResponseService($serviceLocator);
}
}
这是我的可调用服务类:
class ApiJsonResponseService
{
protected $serviceManager;
protected $httpCode = null;
protected $content = null;
public function __construct(ServiceLocatorInterface $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
public function getServiceManager()
{
return $this->serviceManager;
}
public function setHttpCode($httpCode)
{
$this->httpCode = $httpCode;
return $this;
}
public function getHttpCode()
{
return $this->httpCode;
}
public function setContent(ApiBaseResponseInterface $content)
{
$this->content = $content;
return $this;
}
public function getContent()
{
return $this->content;
}
public function dispatch()
{
if (null === $this->httpCode) {
throw new \Exception('Invalid or missing HTTP Code, set valid HTTP code using setHttpCode()');
}
if (null === $this->content) {
throw new \Exception('Invalid or missing content');
}
$response = $this->getServiceManager()->get('Response');
$response->setStatusCode($this->getHttpCode());
$apiJsonResponse = new ApiJsonResponse($this->content);
return $apiJsonResponse->dispatch();
}
}
这是按预期工作的,我想知道是否有更好的方法可以做到这一点?
答案 0 :(得分:2)
您无法将参数传递给服务管理器,但是,您可以将参数传递给AbstractPluginManager。也就是说,我不会用这个策略。
我也不会将ServiceManager传递给您的ApiJsonResponseService
课程。服务管理器只获取Response对象,为什么不直接传递响应对象。
您的第一个代码块变为:
$apiSuccess = new ApiSuccess(array(
'status' => 'success',
'code' => 'user_authenticate_success',
'href' => 'app/welcome',
'message' => 'User Authenticated Successfully'
));
$response = $this->getResponse();
$apiResponse = new ApiJsonResponseService($response, 200, $apiSuccess);
$apiResponse->dispatch();
显然你还需要更新构造函数,响应的可用性取决于你在应用程序中的位置/如果你注入它。