gpt4 book ai didi

php - 中间件中的 Laravel 依赖注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 13:04:45 26 4
gpt4 key购买 nike

我正在使用 Laravel-5.0 的默认 Authentication 中间件,但我将 handle 函数的签名更改为:

public function handle($request, Closure $next, AuthClientInterface $authClient)

我还在服务提供商中注册了 AuthClientInterface:

public function register()
{
$this->app->bind('App\Services\Contracts\AuthClientInterface', function()
{
return new AuthClient(
env('AUTH_SERVER_URL'),
env('AUTH_SESSION_URL'),
env('AUTH_CLIENT_ID')
);
});
}

但是,尽管如此,我还是看到了以下错误:

Argument 3 passed to HelioQuote\Http\Middleware\Authenticate::handle() 
must be an instance of
HelioQuote\Services\Contracts\HelioAuthClientInterface, none given,
called in C:\MyApp\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php on line 125 and defined...

谁能看出我做错了什么?

编辑:我确实通过将 HelioAuthClientInterface 传递给中间件的构造函数来让它工作。但是我认为 IoC 容器除了构造函数之外还会将依赖项注入(inject)到方法中。

最佳答案

您不能直接在 Request 中的 handle 方法中进行依赖注入(inject),而是在构造函数中进行。

中间件是由call_user_func调用的,所以这里的任何注入(inject)都不会起作用。

<?php

namespace App\Http\Middleware;

use Closure;
use App\Foo\Bar\AuthClientInterface; # Change this package name

class FooMiddleware
{
protected $authClient;

public function __construct(AuthClientInterface $authClient)
{
$this->authClient = $authClient;
}

public function handle(Request $request, Closure $next)
{
// do what you want here through $this->authClient
}
}

关于php - 中间件中的 Laravel 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com