簡體   English   中英

具有隱藏屬性的Laravel,Behat和Faker問題

[英]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隱藏屬性

有時您可能希望限制模型數組或JSON表示形式中包含的屬性(例如密碼)。 為此,向模型添加$ hidden屬性定義:

注意:隱藏關系時,請使用關系的方法名稱,而不是其動態屬性名稱。

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

protected $visible = ['password']

臨時修改屬性可見性

如果想使某些通常隱藏的屬性在給定的模型實例上可見,則可以使用makeVisible方法。 makeVisible方法返回模型實例以方便方法鏈接:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM