在另一个控制器laravel上使用Validator

时间:2019-12-18 23:48:48

标签: php laravel authentication

要在登录页面上对我进行身份验证,黄麻需要电子邮件和密码,例如:

(RegisterController)

 protected function validator(array $data)
    {
        return Validator::make($data, [
           // 'NOM' => ['required', 'string', 'max:50'],
           // 'PRENOM' => ['required', 'string', 'max:50'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:PERSONNELS'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

为避免注册页面超载,我只是要求用户填写四个字段:名字,姓氏,电子邮件和密码。

我创建了UserEdit视图以完成和/或更新配置文件:Rue,CP,Ville(街道,邮政编码,城市)。

在我的UserController上,我研究了update function。像这样:

 public function update(Request $request, $id)
    {
        $details = \App\User::find($id);
        if ($request->input('password')==$request->input('password-confirm') && $request->input('password')!='' && $request->input('password-confirm')!='') {
            $details->password = $request->input('password');
            $details->password = Hash::make($details['password']);
        }
        else{
            return redirect()->action('UserController@edit', $id)->withErrors('Mot de passe diférents');
        }

        $membre = auth()->user();

        $details->MATRICULE = $request->input('MATRICULE');
        $details->NOM = $request->input('NOM');
        $details->PRENOM = $request->input('PRENOM');
        $details->RUE = $request->input('RUE');
        $details->CP = $request->input('CP');
        $details->VILLE = $request->input('VILLE');
        $details->email = $request->input('email');

        // $details->id_membre = $membre->id_membre;

        $details->save();
        return redirect()->route('user.edit', $id);
    }

我不明白如何在该函数上放置验证器,就像继承类一样?而且我认为我还会遇到另一个问题:如果用户决定不更改其信息的可能性很大,那么唯一属性将阻止我更新表中的数据。

由于我的循环,如果密码必须超过8个字符但可以接受0,可以吗?

谢谢!

Ps我没有使用Matricule,因为它取决于管理员角色。

2 个答案:

答案 0 :(得分:1)

有关如何在控制器方法中使用验证器的信息,请参见Laravel文档:https://laravel.com/docs/6.x/validation#manually-creating-validators

最终,您需要在controller方法内声明您的验证。如果您创建了一个受保护的函数进行验证,则可以在同一控制器的方法中调用它。

问题是,由于受到保护,您将无法在其他控制器中使用它。不过,这很好,您不想像这样将控制器彼此耦合。

答案 1 :(得分:0)

好的,我看到有很多方法可以做到,就像这样:

public function rules()
    {
        $ID_PERSONNELS = $this->user;

        var_dump($ID_PERSONNELS);
        return [
            'PRENOM'=>'required|min:3|max:20|alpha',
            'NOM'=>'required|min:3|max:20|alpha',
            'email' => 'required|email|max:255|unique:PERSONNELS,email,' . $ID_PERSONNELS.',ID_PERSONNELS',
            'password'=>'required|nullable|min:6',
            'password-confirm'=>'required|nullable|min:6'
        ];
    }

我还有一个问题,我想在密码字段中输入最小值6,但是该字段必须为空,但是nullable方法对我不起作用):