我正在使用Laravel以下库:
在用户模型上我隐藏了密码属性,因此当我执行GET时它按预期工作,显示所有属性最少密码
现在,当我使用从Faker创建的模型进行POST时,我无法发送属性密码。
Faker Factory
<?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 :(得分:1)
我认为这是由于这一行
$res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]);
您将属性发送为json。
正确阅读,这可以提供帮助。
<强> Hiding Attributes From JSON 强>
有时您可能希望限制模型的数组或JSON表示中包含的属性,例如密码。为此,请向模型添加$ hidden属性定义:
注意:隐藏关系时,请使用关系的方法名称, 而不是它的动态属性名称。
或者,您可以使用visible属性来定义应包含在模型的数组和JSON表示中的属性的白名单:
protected $visible = ['password']
暂时修改属性可见性
如果您想在给定的模型实例上显示一些通常隐藏的属性,可以使用makeVisible方法。 makeVisible方法返回模型实例以方便方法链接:
return $user->makeVisible('attribute')->toArray();