【问题标题】:Bind a primitive to Laravel IoC container and resolve in a controller method将原语绑定到 Laravel IoC 容器并在控制器方法中解析
【发布时间】:2017-01-10 15:28:55
【问题描述】:

我正在尝试解析 controller 方法中的原语。

这是我的Provider的注册方法:

public function register()
{
    $this->app->when('App\Http\Controllers\InvalidCustomerController')
        ->needs('$customers')
        ->give(function () {
            return InvalidCustomer::latest()
                ->paginate(20);
        });
}

这是我试图解决的控制器方法$customers

public function index($customers)
{
    return view(
        'customer.invalid.index',
        compact('customers')
    );
}

$customers 未填写。

如果我在构造函数上解决这个问题,一切都会正常工作。

我做错了什么?

ps:我使用的是 Laravel 5.2

【问题讨论】:

  • 你试过类型提示吗? index(InvalidCustomer $customers) & ->needs('InvalidCustomer')
  • 那我需要创建 InvalidCustomer 接口吗?
  • 不一定……我不这么认为
  • 我想我无法为方法参数输入不存在的内容。我会试试的。
  • 是的,我需要创建一些东西来输入提示。但是由于我要返回一个 Eloquent Collection,所以我不能使用界面。 (我猜)

标签: php laravel dependency-injection inversion-of-control ioc-container


【解决方案1】:

不确定您是否找到了解决方案,但要在控制器中使用原语,将其传递给控制器​​类的 __constructor,如下所示:

private $customers;
public function __construct($customers) {
    parent::__construct();
    $this->customers = $customers;
}

这个 $customers 变量可以在类的其他地方使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2016-10-01
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多