2017-06-28 21 views
5

私は$data =['identifier' = 'xxxxxxxxxx'];を入力しましたが、encrypt($data['identifier'])をテーブルinfoプライマリidの列に保存します。カスタム検証ルールでlaravelの検証ルールを使用する方法は?

私はそれを保存する前に検証する必要があります。ルールunique:info, idはここでは適切ではないので、カスタム検証ルールを作成します。そしてカスタム検証ルールでは、まず値encrypt()を入力し、unique検証ルールを使用します。

私はカスタム検証ルールを作成する方法を知っていますが、カスタム検証ルールでunique検証ルールを使用する方法はありますか?

+1

https://laravel.com/docs/5.4/validation#custom-validation-rulesは十分ではないでしょうか? – ceejayoz

+0

@ceejayozもっと私の質問をお読みください。ここでは、カスタム検証ルールを書いていません。私はユニークなルールの範囲にしたい。 –

+0

'id'の初期値は何ですか?それは 'int'それは暗号化されますか? – SaidbakR

答えて

2

ルール「ユニーク」とDatabasePresenceVerifierクラスを使用し、「存在」、このクラスでは、このメソッドを書くことができたとします。したがって、本当にユニークなルールを拡張する必要はありません。このプレゼンスベリファイアにアクセスするだけです。例えば:

Validator::extend('encrypted_unique', function ($attribute, $value, $parameters, $validator) { 
    list ($table, $column, $ignore_id) = $parameters; // or hard-coded if fixed 
    $count = $validator->getPresenceVerifier()->getCount($table, $column, encrypt($value), $ignore_id); 
    return $count === 0; 
}); 

その後、あなたはいつものようにそれを使用することができます。

'identifier' => "encrypted_unique:table,column,$this_id" 
1

はあなたの入力を検証しModuleRequestを持っている、あなたは

protected function validationData() 
{ 
    $all = parent::validationData(); 
    $all['email'] = encrypt($all['email']); 
    return $all; 

} 
+0

私はこの作品を知っています。私は私の質問に記載されているように、この 'encrypt()'を検証規則で使いたいと思っています。 –

関連する問題