绑定类型暗示接口实现
问题描述:
我构建了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无法识别它作为一个实现时,类型暗示在一个函数?
因为Laravel不知道它是否存在,换句话说,依赖注入容器不知道如何注入该类。 – GiamPy