当我测试laravel绑定接口到实现时。我收到了一个错误。 我认为这与autoload有关。你能告诉我为什么吗?告诉我更多细节。 以下是我的步骤: 我做了一个界面:
namespace App\Contracts;
interface EventPusherInterface
{
public function showSelf();
}
并实施它
namespace App\Services;
use App\Contracts\EventPusherInterface;
class RedisEventPusher implements EventPusherInterface
{
public function showSelf()
{
return 'test contact';
}
}
在AppServiceProvider中注册
$this->app->bind(
EventPusherInterface::class,
RedisEventPusher::class
);
在Controller中询问
namespace App\Http\Controllers;
use App\Contracts\EventPusherInterface;
use App\Contracts\InterFaceTestSecond;
use Illuminate\Http\Request;
class TestContactController extends Controller
{
/**
* @var InterFaceTestSecond
*/
protected $eventPusher;
/**
* TestContactController constructor.
* @param InterFaceTestSecond $eventPusher
*/
public function __construct(
InterFaceTestSecond $eventPusher
) {
$this->eventPusher = $eventPusher;
}
public function show()
{
dd($this->eventPusher->showSelf());
}
}
然后我收到了错误
然后我命令composer update
它奏效了。
我只是想知道为什么???
答案 0 :(得分:0)
这是因为Laravel如何引导应用程序。
如果您查看/vendor/autoload_clasmap.php
,您会发现所有类都已映射到那里。这使得它们可以通过服务容器解析为依赖关系。
并非所有文件都要求重建自动加载器,因为它们不是通过服务容器解析的。在您的情况下,您的接口和继承模式必须通过服务容器解析,因此依赖于autoload_classmap
来包含这些类的定义。
希望这可以解决问题。