[英]Laravel, Behat & Faker Issue with Hidden Attributes
我正在使用帶有以下庫的Laravel:
在用戶模型上,我隱藏了密碼屬性,因此當我執行GET時,按預期工作,請顯示所有屬性,最少密碼
現在,當我對使用Faker創建的模型進行POST時,無法發送密碼屬性。
法克工廠
<?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 ]);
}
提前致謝!
我認為這是由於這條線
$res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]);
在這里您將屬性作為json發送。
正確閱讀此內容可以提供幫助。
有時您可能希望限制模型數組或JSON表示形式中包含的屬性(例如密碼)。 為此,向模型添加$ hidden屬性定義:
注意:隱藏關系時,請使用關系的方法名稱,而不是其動態屬性名稱。
或者,您可以使用visible屬性來定義屬性的白名單,該屬性應包含在模型的數組和JSON表示中:
protected $visible = ['password']
臨時修改屬性可見性
如果想使某些通常隱藏的屬性在給定的模型實例上可見,則可以使用makeVisible方法。 makeVisible方法返回模型實例以方便方法鏈接:
return $user->makeVisible('attribute')->toArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.