我正在使用 Laravel,并且我有一個自定義驗證。我想將一些值傳遞給驗證類并針對資料庫進行驗證,因此我將所有驗證邏輯保留在驗證類中。這是我的代碼,但未觸發驗證錯誤:
public function rules() {
$userCode = UserCode::getCode();
$rules = [
'name' => 'required|string',
'email' => 'required|email',
$userCode => 'unique:user_codes,code,'. $userCode
];
return $rules;
}
我在這里做錯了什么?即使$userCode資料庫中已經存在該值,也不會觸發驗證。例如,如果請求包含錯誤的電子郵件,則會觸發驗證。
編輯:我有這個 user_codes 表,它有一個必須保持唯一的代碼列。UserCode::getCode()生成此代碼。因此,我還想在將其傳遞給控制器??之前檢查此代碼在表 user_codes 中是否唯一。我已經有了自定義驗證器,但問題是我希望它也驗證此代碼。驗證器可以與其他請求正文一起正常作業。問題是此代碼不是從請求正文傳遞的,而是簡單地從另一種方法生成的。
uj5u.com熱心網友回復:
您可以使用具有prepareForValidation()方法的FormRequest類來執行此操作。它應該看起來像這樣:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class WhateverRequest extends FormRequest
{
protected function prepareForValidation(): void
{
$this->merge([
'user_code' => UserCode::getCode(),
]);
}
public function rules(): array
{
return [
'name' => 'required|string',
'email' => 'required|email',
'user_code' => 'unique:user_codes,code'
];
}
}
uj5u.com熱心網友回復:
你的問題不清楚,我知道你有一個名為的列code
并且你想要獨一無二,你可以添加用戶代碼來請求,
request()->merge(['userCode'=>$userCode]);
然后
$rules = [
'name' => 'required|string',
'email' => 'required|email',
'userCode' => 'unique:user_codes,code,'.UserCode::getId().',id'
];
我回答了我從你的問題中理解的內容
uj5u.com熱心網友回復:
好的,從以下開始:
php artisan make:rule SomeAwesomeRule
Then edit that created Rule
class SomeAwesomeRule implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
//some logic that needs to be handled...
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return __('Some.nice.translated.message');
}
}
然后應用規則
$rules = [
'name' => 'required|string',
'email' => 'required|email',
'userCode' => new SomeAwesomeRule(#this is a constructor so pass away)
];
uj5u.com熱心網友回復:
看
$rules = [
'name' => 'required|string',
'email' => 'required|email',
'userCode' => 'unique:user_codes,code'
];
//要么
$userCode="";
do{
$userCode = UserCode::getCode();
}
while(UserCode::where('code',$userCode)->first());
// after loop you sure the code is unique
$rules = [
'name' => 'required|string',
'email' => 'required|email',
];
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432286.html
