繁体   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