在Laravel中实现模型接口

时间:2017-10-16 04:00:42

标签: laravel-5 interface models

我有一个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";

它确实失败了。

1 个答案:

答案 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',
]