Lumen PHP:模型中的隐藏密码字段未使用 Model->fill() 填充
Lumen PHP: hidden password field in model not filled using Model->fill()
我正在处理的 API 用户注册码一直有问题。
我有一个 UserController,它获取发布的数据并验证字段。然后它将数据发送到我的 UserService class 中的 SignUpUser 方法,该方法创建用户模型并填写所有给定数据并将其发送到 UserRepository,然后将其发送到我的数据库。
当我 dd()
我的 $password
它被填充但是当我 dd()
我填写 $user
字段 return 空...我没有知道为什么它还没有填写。
我的代码截图:
用户控制器
public function signUpUser(Request $request)
{
$this->validate($request,[
'username' => 'required|regex:/^[(a-zA-Z\s)(0-9\s)]+$/u|min:3',
'email' => 'required|email',
'password' => 'required|min:8',
'displayname' => 'required|regex:/^[(a-zA-Z\s)(0-9\s)]+$/u|min:3',
], [
'min' => 'The :attribute must at least be :min characters long.',
]);
$user = $this->userService->signUpUser(
$request->get('username'),
$request->get('email'),
$request->get('password'),
$request->get('displayname')
);
if($user)
{
//alright! user has been made
$response = ['status' => 'OK', 'message' => "User {$user->username} has successfully been created"];
}
else
{
//something went wrong
$response = ['status' => 'FAIL', 'message' => "Something went wrong or user already exists in DB"];
}
return response()->json($response, 201);
}
用户服务
public function signUpUser($userName, $email, $password, $displayName)
{
$password = password_hash($password, PASSWORD_DEFAULT);
$user = $this->userRepository->signUpNewUser($userName, strtolower($email), $password, $displayName);
$user = $this->userRepository->get($user->pk);
//TODO: send user signup mail soon
return $user;
}
用户存储库
public function signUpNewUser($username, $email, $password, $displayName)
{
$user = $this->getModel();
$user->fill(
[
'username' => $username,
'email' => $email,
'password' => $password,
'displayname' => $displayName,
]);
dd($user::all());
$user->save();
return $user;
}
用户模型
class UserModel extends BaseModel
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username', 'email', 'displayname'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password',
];
}
填写数据后转储$user
将其添加到 $fillable
:
protected $fillable = ['username', 'email', 'displayname', 'password'];
此外,不要在数据库中保留未加密的密码,使用bcrypt()
:
'password' => bcrypt($password),
我正在处理的 API 用户注册码一直有问题。
我有一个 UserController,它获取发布的数据并验证字段。然后它将数据发送到我的 UserService class 中的 SignUpUser 方法,该方法创建用户模型并填写所有给定数据并将其发送到 UserRepository,然后将其发送到我的数据库。
当我 dd()
我的 $password
它被填充但是当我 dd()
我填写 $user
字段 return 空...我没有知道为什么它还没有填写。
我的代码截图:
用户控制器
public function signUpUser(Request $request)
{
$this->validate($request,[
'username' => 'required|regex:/^[(a-zA-Z\s)(0-9\s)]+$/u|min:3',
'email' => 'required|email',
'password' => 'required|min:8',
'displayname' => 'required|regex:/^[(a-zA-Z\s)(0-9\s)]+$/u|min:3',
], [
'min' => 'The :attribute must at least be :min characters long.',
]);
$user = $this->userService->signUpUser(
$request->get('username'),
$request->get('email'),
$request->get('password'),
$request->get('displayname')
);
if($user)
{
//alright! user has been made
$response = ['status' => 'OK', 'message' => "User {$user->username} has successfully been created"];
}
else
{
//something went wrong
$response = ['status' => 'FAIL', 'message' => "Something went wrong or user already exists in DB"];
}
return response()->json($response, 201);
}
用户服务
public function signUpUser($userName, $email, $password, $displayName)
{
$password = password_hash($password, PASSWORD_DEFAULT);
$user = $this->userRepository->signUpNewUser($userName, strtolower($email), $password, $displayName);
$user = $this->userRepository->get($user->pk);
//TODO: send user signup mail soon
return $user;
}
用户存储库
public function signUpNewUser($username, $email, $password, $displayName)
{
$user = $this->getModel();
$user->fill(
[
'username' => $username,
'email' => $email,
'password' => $password,
'displayname' => $displayName,
]);
dd($user::all());
$user->save();
return $user;
}
用户模型
class UserModel extends BaseModel
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username', 'email', 'displayname'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password',
];
}
填写数据后转储$user
将其添加到 $fillable
:
protected $fillable = ['username', 'email', 'displayname', 'password'];
此外,不要在数据库中保留未加密的密码,使用bcrypt()
:
'password' => bcrypt($password),