将原语绑定到控制器仅适用于构造函数

Gra*_*ate 5 laravel

我将一个原始值绑定到一个类。

$this->app->when('App\Http\Controllers\TestController')
            ->needs('$numPages')
            ->give(1000);
Run Code Online (Sandbox Code Playgroud)

但该值仅注入到类的构造函数中,而不注入到其他方法中。

class TestController extends Controller
{
    public function __construct($numPages = 0)
    {
        // $numPages = 1000  WORKS
    }

    public function index($numPages = 0)
    {
        // $numPages = 0  DOESNT WORK
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我绑定一个常规类时,它的实例会被注入到所有方法中。这是有意的行为吗?

小智 0

我认为这可能是有意的,因为您的TestController::index参数应该由路线提供。因此,像这样的路线在被击中时/testcontroller/index/{numPages}可以提供$numPages值 4 。/testcontroller/index/4

如果可以通过 DI 注入该值,那么您最终可能会遇到错误,您期望该值来自路由,但正在注入不同的值。