[英]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.