2016-01-06 4 views
1

Я создал приложения laravel в Laravel 4 и Laravel 5, но на этот раз я решил написать все свои тесты, никогда ранее не писал тестов для простых приложений.Как я могу использовать __construct в соединении с контроллером в 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', '[email protected]'); 

, но здесь все идет не так. На самом деле попытка запустить страницу для получения списка учетных записей является проблемой. Я знаю, что это больше связано с классом контроллера, но вот что у меня есть.

<?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() для моих модульных тестов, все было хорошо.

Спасибо.

ответ

0

Используя __construct, он ожидает аргументы при каждом его инициализации. Таким образом, вместо этого, вы будете использовать

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

Если вы хотите использовать эти переменные для создания новой модели, смотрите в $fillable.

+0

спасибо за возвращение ... не уверен, что я следую хотя. То, что я пытаюсь сделать, это получить список всех учетных записей ... не будет ли $ accountModel просто новым экземпляром учетной записи? – dstewart101

+0

Хм, ты прав. Что вы пытаетесь выполнить с помощью __construct? – aynber

+0

__construct был настроен для установки метода setup() в phpUnit для модульного тестирования. я не особенно привязан к этому только, что я думал, что мне нужно, чтобы мои тесты реорганизовали их во что-то более управляемое. – dstewart101