我正在构建Lumen应用程序,并试图构建一个非常坚实的精神,用小的可重用和可交换的包。
我有一个抽象资源控制器的接口,比如
use Psr'Http'Message'ServerRequestInterface;
interface ResourceControllerContract
{
public function store(ServerRequestInterface $request);
}
在我的用户资源控制器实现
use GuzzleHttp'Psr7'ServerRequest;
final class UserController extends ResourceController
{
public function store(ServerRequest $request)
{
$request = $request->getParsedBody();
}
}
由于Guzzle Request已经实现了Psr'Http'Message'RequestInterface,我认为这可以传递进去,但我的应用程序一直抛出一个异常,说传递给store()的属性应该声明为resourcececontrolercontract
在register方法中的服务提供者中,我创建了如下绑定
$this->app->bind(
'Psr'Http'Message'ServerRequestInterface',
'GuzzleHttp'Psr7'ServerRequest'
);
但是它仍然抛出相同的错误,有人能建议哪里出了问题吗?这是我第一次用这种方式构建应用程序,如果我忽略了一个简单的疏忽,请原谅我
所以我们知道UserController的实现应该是这样的
use Psr'Http'Message'ServerRequestInterface;
final class UserController extends ResourceController
{
public function store(ServerRequest $request)
{
$request = $request->getParsedBody();
}
}
然后把GuzzleHttp'Psr7'ServerRequest绑定到Psr'Http'Message'ServerRequestInterface
有人能解释为什么即使GuzzleHttp'Psr7'ServerRequest已经实现了Psr'Http'Message'ServerRequestInterface,它必须在laravel服务提供商中绑定。或者当在函数中提示类型时,php不将其识别为实现?