我有一个Laravel 5模型帐户,它实现了Interface
。
我已经实现了Interface
的所有方法,但是当我运行代码时,Laravel抱怨模型没有实现接口。
错误
Account.php(型号)
<?php
namespace Abc\Accounts\Models;
use Abc\Accounts\Contracts\Accountlnterface;
use Illuminate\Database\Eloquent\Model;
class Account extends Model implements Accountlnterface {
....
在我的控制器中,我正在执行此操作
$account = Account::where('something', 'value')->first();
这样可以很好地返回模型。
问题在于我将其传递给另一个类控制器
$result = new Transaction($account, 5.00);
交易文件
public function __construct(Accountlnterface $account, float $value = 0.00)
{
$this->account = $account;
事务构造函数正在寻找接口,但是laravel正在抱怨Account没有实现它。
我不确定这段代码有什么问题。
Laravel的错误
类型错误:参数1传递给 Abc .... \ Transaction :: __ construct()必须是。的实例 Abc \ Accounts \ Components \ AccountInterface,实例 给出了Tymr \ Plugins \ Accounts \ Models \ Account。
在加载模型后直接运行此代码
if($account instanceof AccountInterface)
echo "working";
else
echo "fails";
它确实失败了。
答案 0 :(得分:2)
您需要在其中一个服务提供商中注册服务容器绑定,或者更好地创建新的服务提供商。
它帮助Laravel了解用于界面的实现。
use Illuminate\Support\ServiceProvider;
class ModelsServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind(
'Abc\Accounts\Contracts\Accountlnterface',
'Abc\Accounts\Models\Account'
);
}
}
在app/config/app.php
中,在可用的提供商下注册您的服务提供商。
'providers' => [
...
'ModelsServiceProvider',
]