如何在laravel中使用__construct与控制器结合使用

时间:2016-01-06 18:23:45

标签: php unit-testing laravel-5.2 construct

我已经在Laravel 4和Laravel 5中构建了laravel应用程序,但我决定这次首先编写所有测试,之前从未为琐碎的应用程序编写测试。

这是我的帐户类 - 用于说明

class Account extends Model
{
    protected $customer_id;
    protected $bookmaker_id;
    protected $balance;
    protected $profit;

    public function __construct($customer_id, $bookmaker_id, $balance, $profit) {
        $this->customer_id = $customer_id;
        $this->bookmaker_id = $bookmaker_id;
        $this->balance = $balance;
        $this->profit = $profit;
      }
}

所以我所有的单元测试运行良好:

我的路线已正确设置到我想要显示的页面

Route::get('/accounts', 'AccountController@index');

但这是出错的地方。实际上尝试运行页面来获取帐户列表很麻烦。我知道还有更多与控制器类有关,但这就是我所拥有的。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Account;

class AccountController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $accounts = Account::all();
        return view('account.index', compact('accounts'));
    }
}

然后我收到此错误 -

ErrorException in Account.php line 14:
Missing argument 1 for App\Account::__construct(), called in /Applications/MAMP/htdocs/mb-app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 665 and defined

有人可以告诉我应该如何设置我的控制器吗?直到我为单元测试添加了__construct(),这一切都没问题。

感谢。

1 个答案:

答案 0 :(得分:0)

通过使用__construct,它会在您初始化它时期望参数。所以相反,你要使用

$accountModel = new Account($customer_id, $bookmaker_id, $balance, $profit);
$accounts = $accountModel->all();

如果您想使用这些变量来创建新模型,请查看$fillable