2016-07-04 5 views
0

속성 :Laravel, Behat 및 위조자 문제는 다음 라이브러리와 내가 Laravel을 사용하고

  • Behat
  • Faker
  • 나는 암호가 숨김 속성을 가지고있는 사용자 모델에

, 그래서 내가 할 때 그것은 예상대로 작동하고 모든 속성을 최소한의 암호 표시

이제 내가 만든 모델로 함께 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 ]); 
} 

오류가 발생했습니다. 비밀번호가 필요합니다. 숨겨진 비밀번호 만 설정하는 방법이 있습니까?

나는 다음 코드를 사용하여이 문제를 "고정"하지만 사전에이 방법을

<?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