2017-04-01 6 views
1

私はthis articleLaravel 5消毒に必要なフィールドの動作

以下

以下の私のアプリケーションでは、ユーザー入力をサニタイズしようとしています、私は<h1></h1>を入れしようとすると私の要求

class TestRequest extends Request 
{ 

    public function authorize() 
    { 
     return true; 
    } 

    public function rules() 
    { 
     $this->sanitize(); 

     return [ 
      'title'=>'required|max:100' 

     ]; 
    } 

    public function sanitize() 
    { 

     $input = $this->all(); 
     if(!empty($input)) 
     { 
     $input['title'] = trim(strip_tags($input['title'])); 
     $this->replace($input); 

     } 

    } 
} 

タフタイトルは、必須フィールドですタイトルフィールドの入力として、sanitize()のロジックに従って、タグは取り除かれますが、空の文字列がデータベースに保存されます。ルールに必要なフィールド検証は何も影響を及ぼさない。

これを処理する方法は?

アップデート:以下

要求を保存するためのコントローラのメソッドです。あなたのコード内

public function save(TestRequest $request) 
{ 
    $input = $request->all(); 
    ... 
} 
+0

関連コントローラの表示方法をご覧ください。 –

+0

@AlexeyMezeninコントローラメソッドを追加しました。 – ZedBee

答えて

1

まずオプション(マージを使用することです)の代わりに置き換える()、すなわち:

$this->merge(['title' => trim(strip_tags($input['title']))]); 

第二の選択肢、すなわち、すべての()関数をオーバーライドすることです:

public function all() 
{ 
    $input = parent::all(); 
    if(!empty($input)) 
    { 
     $input['title'] = trim(strip_tags($input['title'])); 
    } 
    return $input; 
} 

最後のコード例では、sanitize()関数を使用する必要はありません。

+0

マージオプションが機能しませんでした。第二の選択肢が働いた。オプション1、2をサニタイズ方法(オプション3)と一緒に使用しない場合に、入力のクリーニングを処理する方法を詳しく教えてください。 – ZedBee

+0

私は過去にオプション1を使用しましたが、私は正確なLaravelのバージョンを覚えていません。さて、Laravel 5.4では、通常はvalidationData()をオーバーライドして公開していますが、それは別の長い話です。今までlaravelでは、入力を墨塗りするための容認された解決法はない(議論の余地のある主題)。だからあなたが何をしているか知るまで(all()関数をオーバーライドすることはお勧めできません)、それは問題ありません。 – dparoli

+0

完全性のために、入力を変換する2つのミドルウェアがありますが、要求ごとにグローバルではありません。 \ App \ Http \ミドルウェア\ TrimStringsと\ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull – dparoli

関連する問題