【发布时间】:2020-07-28 20:39:56
【问题描述】:
你好,我有这个简单的更新方法,但它有问题 问题是用户有四个条件 用于用户编辑
1- 旧电子邮件 == 新电子邮件
2- 旧电子邮件!== 新电子邮件
3- 密码 == null
4- 密码 !== null
所以核心功能是这样的
$v = Validator::make($request->all(),[
'name_ar' => ['required', 'string', 'max:255'],
'name_en' => ['required', 'string', 'max:255'],
'email' => [ 'required' ,'string', 'email', 'max:255'],
'permission' => ['required', 'string'],
'branch' => ['required', 'integer'],
]);
if($v->fails()){
return redirect()->back()->withErrors($v)->withInput();
}
$user->name_ar = $request->input('name_ar');
$user->name_en = $request->input('name_en');
$user->email = $request->input('email');
$user->password = $user->password;
if($selected_permission == 'admin'){
$this->saveAsAdmin($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$this->saveAsUser($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
另存为管理员和另存为用户是简单的方法
另存为管理员
public function saveAsAdmin($request , $user)
{
$user->is_admin = 1;
$user->is_user = 0;
$user->branch_id = $request->input('branch');
$user->save();
}
另存为用户
public function saveAsUser($request , $user)
{
$user->is_admin = 0;
$user->is_user = 1;
$user->branch_id = $request->input('branch');
$user->save();
}
问题是,如果我做了 4 种方法并在每种情况下使用它们,它就不能正常工作 名称 ar + 名称 en + 权限未保存到数据库中 + 验证器不显示错误 在过去的几个小时里,我一直在努力让它变得干净,但没有任何东西真正正常工作,所以我最终把它变成了这样
public function update(Request $request , $id)
{
$user = User::find($id);
$old_email = $user->email;
$new_email = $request->input('email');
$selected_permission = $request->input('permission');
if($old_email == $new_email){
if($request->input('password') == null){
$v = Validator::make($request->all(),[
'name_ar' => ['required', 'string', 'max:255'],
'name_en' => ['required', 'string', 'max:255'],
'email' => [ 'required' ,'string', 'email', 'max:255'],
'permission' => ['required', 'string'],
'branch' => ['required', 'integer'],
]);
if($v->fails()){
return redirect()->back()->withErrors($v)->withInput();
}
$user->name_ar = $request->input('name_ar');
$user->name_en = $request->input('name_en');
$user->email = $request->input('email');
$user->password = $user->password;
if($selected_permission == 'admin'){
$this->saveAsAdmin($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$this->saveAsUser($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$v = Validator::make($request->all(),[
'name_ar' => ['required', 'string', 'max:255'],
'name_en' => ['required', 'string', 'max:255'],
'email' => [ 'required' ,'string', 'email', 'max:255'],
'password' => ['required', 'string', 'min:8',],
'permission' => ['required', 'string'],
'branch' => ['required', 'integer'],
]);
if($v->fails()){
return redirect()->back()->withErrors($v)->withInput();
}
$user->name_ar = $request->input('name_ar');
$user->name_en = $request->input('name_en');
$user->email = $request->input('email');
$user->password = bcrypt($request->input('password'));
if($selected_permission == 'admin'){
$this->saveAsAdmin($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$this->saveAsUser($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}else{
if($request->input('password') == null){
$v = Validator::make($request->all(),[
'name_ar' => ['required', 'string', 'max:255'],
'name_en' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'permission' => ['required', 'string'],
'branch' => ['required', 'integer'],
]);
if($v->fails()){
return redirect()->back()->withErrors($v)->withInput();
}
$user->name_ar = $request->input('name_ar');
$user->name_en = $request->input('name_en');
$user->email = $request->input('email');
$user->password = $user->password;
if($selected_permission == 'admin'){
$this->saveAsAdmin($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$this->saveAsUser($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$v = Validator::make($request->all(),[
'name_ar' => ['required', 'string', 'max:255'],
'name_en' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8'],
'permission' => ['required', 'string'],
'branch' => ['required', 'integer'],
]);
if($v->fails()){
return redirect()->back()->withErrors($v)->withInput();
}
$user->name_ar = $request->input('name_ar');
$user->name_en = $request->input('name_en');
$user->email = $request->input('email');
$user->password = $user->password;
if($selected_permission == 'admin'){
$this->saveAsAdmin($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
$this->saveAsUser($request , $user);
return redirect('super-admin/permissions/index')->with('success' , 'User Edited Successfully');
}
}
是的,它是 UGLYYY 我完全同意你的观点,但至少它可以正常工作,我对 laravel 并不陌生,但我对在 php 中编写干净的代码知之甚少,也许是因为我没有学习纯 php 我只是直接学了laravel
请与我分享一个可行的 + 干净的解决方案,以便未来的每个人 + 学习者都可以提高他们的技能和知识
【问题讨论】:
-
是的,是的,我是根据你的记忆说的,不过感谢提醒我会编辑它
-
这毫无意义:
$user->password = $user->password; -
太棒了,我会删除它你有一点,我会立即删除它,但是如果我们用一个命名函数将 if 语句的每个块分开,但当我这样做时,真正会变得更好的是验证器在索引页面上显示错误,并且某些信息未正确保存我不知道为什么,有什么想法吗?
-
有很多不必要的代码,例如如果用户不是管理员,只需将其保存为 is_admin = 0。不需要 is_user = 1,is_admin = 0;第二个建议是批量分配这些变量,这将使代码更短。
-
它只是为了提供更多保护,例如,如果有人知道数据库的结构并且他使用例如 burp 套件将它们都分配给 1,这将在未来产生问题,并且关于分配给 i将使用它感谢您的建议^_^
标签: php laravel coding-style code-cleanup