2017-03-08 50 views
2

我使用OctoberCMS根据LaravelTwig如何验证和清理表单复选框数组?

我有一个带复选框的表格queued[]。他们使用循环提交和删除Laravel。

这一切工作,但我怎么能validate和消毒阵列?

验证需要星号*? '*' => Input::get('queued')

Sanitize,我得到错误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只是传递给函数的任何表单输入。我将$ checkboxes传入它。我会更新代码。 –

回答

0

您可以编写自己的自定义的验证规则。 您可以在插件boot()方法是这样定义一个新的规则:

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的数组,然后检查值。取决于你的验证规则,你可能不需要在那之后进行消毒。

然后你可以使用你提供的名称的自定义规则:

$validator = Validator::make(input(), [ 
    'queued' => 'myCustomRule', 
    ] 
);