绑定类型暗示接口实现

问题描述:

我构建了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(); 
    } 
} 

因为狂饮请求已经实现了PSR \ HTTP \信息\ RequestInterface,我推测这可以通过,但我的应用程序不断抛出一个异常,说属性传递给store()应该声明为描述在ResourceControllerContract

在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无法识别它作为一个实现时,类型暗示在一个函数?

+0

因为Laravel不知道它是否存在,换句话说,依赖注入容器不知道如何注入该类。 – GiamPy