2016-07-04 49 views
0

我使用Laravel與以下庫:與隱藏Laravel,貝哈特&法克爾問題屬性

在用戶模式我有密碼隱藏屬性,所以當我做一個GET它的工作如預期,顯示所有屬性最少密碼

現在,當我做一個與模型創建一個POST fo rm Faker我無法發送Password屬性。

法克爾廠

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

我認爲,這是由於該行

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

您發送屬性爲JSON。

正確閱讀本文,它可以提供幫助。

Hiding Attributes From JSON

有時你可能希望限制的屬性,如密碼,所包含模型的數組或JSON表示英寸要做到這一點,一個隱藏$屬性定義添加到模型:

注意:隱藏的關係,用關係的方法名, 不是它的動態屬性的名稱。

或者,你可以使用Visible屬性來定義應包含在模型中的數組和JSON表示屬性的白名單:

protected $visible = ['password'] 

暫時修改屬性顯示

如果您希望在給定的模型實例上顯示一些通常隱藏的屬性,您可以使用makeVisible方法。makeVisible方法返回模型實例以便於方法鏈接:

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

Thanks!我添加了'$ modelFake-> makeVisible('password');'進入上下文函數並完美工作! – AgeValed