2016-07-04 9 views
0

属性だから私はGETそれは期待どおりに動作しているすべての属性を最小限のパスワードを表示Laravel、Behat&偽物問題は、私は次のライブラリにLaravelを使用してい

今私はモデルを作成してPOSTを行うときrm Faker属性のパスワードを送信できません。

偽物工場

<?php 

$factory->define(App\User::class, function (Faker\Generator $faker) { 
    $role = App\Role::all()->random(1); 
    return [ 
     'role_id' => $role->id, 
     'username' => $faker->userName, 
     'first_name' => $faker->firstName, 
     'last_name' => $faker->lastName, 
     'email' => $faker->safeEmail, 
     'password' => str_random(10), 
    ]; 
}); 

ユーザーモデル

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 

protected $hidden = [ 'password' ]; 

/* rest of the code */ 
/* I have a validation rule for password to be required */ 

ユーザコンテキスト機能

<?php 
/** 
* @When I try to save a valid user 
*/ 
public function iTryToSaveAValidUser() 
{ 
    $modelFake = factory('App\User')->make(); 
    $client = new GuzzleHttp\Client(); 
    $data['data'] = $modelFake; 
    $res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]); 
} 

エラーが発生しましたパスワードが必要ですが、GETで隠しただけを設定する方法がありますか?

私は次のコードで、この問題を「固定」が、私はこのように事前に

<?php 
/** 
* @When I try to save a valid user 
*/ 
public function iTryToSaveAValidUser() 
{ 
    $modelFake = factory('App\User')->make(); 
    $client = new GuzzleHttp\Client(); 
    $modelArray = $modelFake->toArray(); 
    $modelArray['password'] = str_random(10); 
    $data['data'] = $modelArray; 
    $res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]); 
} 

感謝を好きではありません!

答えて

0

私がこのラインあなたはJSONなどの属性を送る

$res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]); 

によるものだと思います。

これを正しく読むと、役立ちます。

Hiding Attributes From JSON

時々、あなたは、モデルの配列やJSON表現に含まれているパスワードなどの属性を、制限することを望むかもしれません。関係を非表示にすると、関係者のメソッド名、 ないその動的なプロパティ名を使用します。

注:これを行うには、お使いのモデルに$隠されたプロパティ定義を追加します。

protected $visible = ['password'] 

を一時的に変更するプロパティの可視性

また、あなたは、モデルの配列とJSON表現に含まれるべき属性のホワイトリストを定義するには、Visibleプロパティを使用することができます

特定のモデルインスタンスで一般的に隠された属性を表示したい場合は、makeVisibleメソッドを使用できます。makeVisibleメソッドは、便利なメソッドチェーニングのためのモデルインスタンスを返します。

return $user->makeVisible('attribute')->toArray(); 
+0

ありがとう!!私は '$ modelFake-> makeVisible( 'password');をコンテキスト関数に追加して、完全に動作します! – AgeValed