【发布时间】:2016-02-11 12:09:20
【问题描述】:
问题
我目前正在构建一个小型库,它允许我将信息传递给 Factory 类,然后它会创建一个“RestfulResponse”实例。
我正在尝试将这个库构建为与框架无关,这意味着我可以在 Laravel 以外的项目中使用它。
RestfulResponse 负责处理对客户端的响应。我想使用 Laravel/Symfony 的 Response 类,但是,为了使其与框架无关,Response 类不能是具体的。
我可以使用 Laravel 的 IoC 容器来导入这个类,但是为了让它工作,Response 类需要实现一个接口,而它没有。
有什么方法可以通过 Laravel 的 IoC 容器,或者通过其他一些 PHP 技巧,我可以让它工作吗?注意:我使用的是构造函数依赖注入,而不是 Facades。
代码示例
此代码示例有效,但与框架无关。
基本上,我需要找到一种方法使其与框架无关,同时仍依赖 Laravel 的 Response 类。
Laravel 的响应类
namespace Illuminate\Http;
class Response
{}
我的工厂班
namespace App\Restful;
class RestfulResponseFactory
{
protected $restfulResponse;
public __constructor(RestfulResponse $restfulResponse)
{
$this->restfulResponse = $restfulResponse;
}
}
RestfulResponse 类
namespace App\Restful;
use Illuminate\Http\Response;
class RestfulResponse
{
protected $response;
public __constructor(Response $response)
{
$this->response = $response;
}
}
静态依赖注入(Laravel 的容器处理这个)
namespace App\Restful;
use Illuminate\Http\Response;
$factory = new RestfulResponseFactory(
new RestfulResponse(new Response)
);
【问题讨论】:
-
简短回答是否定的。 Symfony 的人一直否认任何创建请求/响应接口的尝试。他们说这是一件坏事。然而,有一个 PSR7 接口php-fig.org/psr/psr-7 正在慢慢流行起来。它可能是您会发现的最接近不可知界面的东西。不了解 Laravel,但 Symfony 框架有一个桥接器 symfony.com/doc/current/cookbook/psr7.html 在 Symfony 请求/响应对象和 psr7 实现之间进行转换。
-
有趣。我不知道 PSR-7 或桥接。显然 Laravel 确实允许你使用 symfony 桥 (laravel.com/docs/5.1/requests#psr7-requests),所以我要试一试,如果它可以作为答案发布,我会接受。
-
希望你不介意,但我已经发布了一个答案,因为我有很多话要说。
标签: php symfony oop laravel code-injection