2017-03-08 9 views
2

LaravelTwigに基づいてOctoberCMSを使用しています。フォームチェックボックス配列を検証して消毒する方法は?

私はチェックボックスqueued[]を持つフォームを持っています。それらは、ループを使用してLaravelで送信され、削除されます。

すべて動作しますが、どのようにしてvalidateを作成して配列をサニタイズできますか?

検証にはアスタリスク*が必要ですか? '*' => Input::get('queued')

サニタイズすると、エラーtrim() expects parameter 1 to be string, array givenが表示されます。

フォーム

<form method="POST" action="{{ url_current() }}"> 
    <input type="hidden" name="_handler" value="onDelete" /> 
    <input type="checkbox" name="queued[]" value="item1" /> 
    <input type="checkbox" name="queued[]" value="item2" /> 
    <input type="checkbox" name="queued[]" value="item3" /> 
    <button type="submit" name="submit" value="delete">Delete Checked</button> 
</form> 

PHP

public function onDelete() { 

    # Validator 
    $validator = Validator::make(
     [ 
      '_handler' => Input::get('_handler'), 
      'queued' => Input::get('queued'), 
      'submit' => Input::get('submit') 
     ] 
    ); 
    if ($validator->fails()) { 
     return Redirect::back()->withErrors($validator); 
     exit(); 
    } 

    # Sanitize 
    function sanitize_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = strip_tags($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 

    # Delete Checked 
    $checkboxes = ''; 
    $checkboxes = isset($_POST['queued']) ? $_POST['queued'] : array(); 
    // Sanitize 
    $checkboxes = $this->sanitize_input($checkboxes); 

    foreach($checkboxes as $file) {   
     File::delete("$file"); 
    } 
} 
+1

私はそれが '「キューに入れられた[]」=>入力として動作します検証のためのソリューションを持っている::(「キューに入れられた」)を取得、 'それを試してください –

+0

sanitize_inputメソッドで渡した$ dataとは何ですか? –

+0

@recoverymen $ dataは、関数に渡されたすべてのフォーム入力です。私はそれに$チェックボックスを渡します。私はコードを更新します。 –

答えて

0

独自のカスタム検証ルールを書くことができます。

Validator::extend('myCustomRule', function($attribute, $value, $parameters) { 
    # check if the $value is in valid 
    # return true if it is and return false if it is not valid 
    return true; 
}); 

あなたは、配列をforeachの、その後の値を確認することができます: あなたは、このようなプラグインboot()方法で新しいルールを定義することができます。あなたの検証ルールにもよりますが、それ以降はサニタイズする必要はありません。

そして、あなたはあなたが指定された名前でカスタムルールを使用することができ、その後:

$validator = Validator::make(input(), [ 
    'queued' => 'myCustomRule', 
    ] 
); 
関連する問題