我正在使用grep '^[67]h' file
而我正在尝试将Laravel 5.4
课程注入$order
一个由{{1}实施的课程}}。像这样:
trait
特征的model
看起来像这样:
class Forum extends Model
{
use Orderable;
我的服务提供商看起来像这样:
constructor
我的trait Orderable
{
public $orderInfo;
public function __construct(OrderInterface $orderInfo)
{
$this->orderInfo = $orderInfo;
}
类的构造函数如下所示:
public function register()
{
$this->app->bind(OrderInterface::class, function () {
return new Order(new OrderRepository());
});
$this->app->bind(OrderRepositoryInterface::class, function () {
return new OrderRepository();
});
}
但我收到错误:
Order
public function __construct(OrderRepositoryInterface $orderInfo)
{
$this->orderInfo = $orderInfo;
}
班正在实施Type error: Argument 1 passed to App\Forum::__construct() must implement interface Project\name\OrderInterface, array given, called in /home/vagrant/Code/Package/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 268
。 Order类正在实现OrderRepository
接口。
App \ Forum是使用OrderRepositoryInterface
特征的模型。
我在这里做错了什么?
答案 0 :(得分:1)
您正在延长Model
。此类已经有一个__construct
您需要使用。这个__construct
期望array $attributes = []
作为第一个参数。
所以在你的__construct
中你还需要将它作为第一个参数并将其传递给父类:
public function __construct(array $attributes = [], OrderRepositoryInterface $orderInfo)
{
$this->orderInfo = $orderInfo;
parent::__construct($attributes);
}
但是,您可以使用__construct
在laravel中使用boot
。
例如在Model
:
class Forum extends Model
{
protected static function boot()
{
parent::boot();
// Do something
}
}
或Trait
:
trait Orderable
{
public static function bootOrderableTrait()
{
static::created(function($item){
// Do something
});
}
}
答案 1 :(得分:0)
在PHP中,不可能有多个构造函数。如果你想看模型:
public function __construct(array $attributes = [])
它期待数组。这就是为什么我假设Model数组中的某个地方传递给构造函数而不是'OrderInterface'。