ユーザーが生年月日を更新できるフォームを処理しています。フォームは、ユーザのための3つの別々のフィールドを与えday
、month
そしてyear
。もちろん、サーバー側では、これら3つの別々のフィールドを1つの値として扱いたいと思いますyyyy-mm-dd
。
だから、検証と私のデータベースを更新する前に、私が作成するフォーム要求を変更したいdate_of_birth
連結することで、フィールドをyear
、month
とday
して-
日付書式Iの必要性を作成します(そしておそらく、元の3つのフィールドの設定を解除)する文字。
私のコントローラーでこれを手動で達成することは問題ではありません。入力を取得し、-
文字で区切られたフィールドを結合して、設定を解除するだけです。その後、処理を処理するコマンドに渡す前に、手動で検証できます。
ただし、FormRequest
検証を処理するためにを使用して、それをコントローラーメソッドに注入することをお勧めします。したがって、検証を実行する前に、フォームリクエストを実際に変更する方法が必要です。
私は似たような次の質問を見つけました:Laravel5リクエスト-データの変更
all
フォームリクエストのメソッドをオーバーライドして、検証前にデータを操作するためのロジックを含めることをお勧めします。
<?php namespace App\Http\Requests;
class UpdateSettingsRequest extends Request {
public function authorize()
{
return true;
}
public function rules()
{
return [];
}
public function all()
{
$data = parent::all();
$data['date_of_birth'] = 'test';
return $data;
}
これはすべて検証に適していますが、all
メソッドをオーバーライドしても、フォームリクエストオブジェクトのデータは実際には変更されません。したがって、コマンドの実行に関しては、フォームリクエストには元の変更されていないデータが含まれています。オーバーライドされたall
メソッドを使用してデータを引き出す場合を除きます。
特定のメソッドを呼び出す必要のない、フォームリクエスト内のデータを変更するためのより具体的な方法を探しています。
乾杯
Laravel5.1ではそれができます
<?php namespace App\Http\Requests;
class UpdateSettingsRequest extends Request {
public function authorize()
{
return true;
}
public function rules()
{
return [];
}
protected function getValidatorInstance()
{
$data = $this->all();
$data['date_of_birth'] = 'test';
$this->getInputSource()->replace($data);
/*modify data before send to validator*/
return parent::getValidatorInstance();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加