如何验证和消毒形式的复选框阵列



我正在基于laravel和twig。

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

这一切都有效,但是如何验证和消毒数组?

验证需要星号 *?'*' => 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");
    } 
}

您可以编写自己的自定义验证规则。您可以在插件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;
});

您可以使用数组,然后检查值。取决于您的验证规则,在此之后您可能不需要消毒。

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

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

最新更新