2016-07-04 48 views
0

我使用Laravel与以下库:与隐藏Laravel,贝哈特&法克尔问题属性

在用户模式我有密码隐藏属性,所以当我做一个GET它的工作如预期,显示所有属性最少密码

现在,当我做一个与模型创建一个POST fo rm Faker我无法发送Password属性。

法克尔厂

<?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

我认为,这是由于该行

$res = $client->request('POST', url($this->apiURL . '/user'),[ 'json' => $data ]); 

您发送属性为JSON。

正确阅读本文,它可以提供帮助。

Hiding Attributes From JSON

有时你可能希望限制的属性,如密码,所包含模型的数组或JSON表示英寸要做到这一点,一个隐藏$属性定义添加到模型:

注意:隐藏的关系,用关系的方法名, 不是它的动态属性的名称。

或者,你可以使用Visible属性来定义应包含在模型中的数组和JSON表示属性的白名单:

protected $visible = ['password'] 

暂时修改属性显示

如果您希望在给定的模型实例上显示一些通常隐藏的属性,您可以使用makeVisible方法。makeVisible方法返回模型实例以便于方法链接:

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

Thanks!我添加了'$ modelFake-> makeVisible('password');'进入上下文函数并完美工作! – AgeValed