pframework/p-input

该包已废弃,不再维护。未建议替代包。

一个用于通过调用和数组过滤和验证用户输入的架构

0.1.0 2013-09-11 04:33 UTC

This package is auto-updated.

Last update: 2022-02-01 12:27:05 UTC


README

P_InputSet 是一个处理输入集合的小组件。对于每一项特定的输入,定义了一个数组来处理如何映射输入、过滤/验证,是否需要在该集合中,以及如果输入无效时可能的错误信息。

一个完整的数组可能看起来像这样

$config = [
    'first-name' => [
        'name' => 'first_name', // mapped name
        'required' => true,
        'process' => function ($value, $source) {
            if (strlen($value) < 2) { // validation
                return false;
            }
            return $value; // could potentially filter before returning
        },
        'error' => 'First name must be more than 2 characters'
    ]
];
$is = new P\InputSet($config);
$result = $is->process($_POST); // use post in this case
$result->isValid();
echo $result['first_name'];

示例

这是一个2部分示例,一个控制器和相应的HTML表单。请注意,InputSet组件不会尝试进行任何类型的输出转义,这将是任何特定视图层的任务。

class FormController {
    public function handle() {
        if ($_POST) {
            $inputResult = $this->getUserInput($_POST);
            if ($inputResult->isValid()) {
                var_dump($inputResult);
                exit;
            }
        }
        include 'form.phtml';
    }
    
    protected function getUserInput($source) {
        $p = new P\InputSet([
            'username' => [
                'required' => true,
                'process' => function ($value, $source) {
                    if (!preg_match('#^[a-zA-Z0-9_]*$#', $value) || strlen($value) <= 5) {
                        return false;
                    }
                    return $value;
                },
                'error' => 'Username must be at least 5 characters and be only numbers and letters'
            ],
            'password' => [
                'required' => true,
                'error' => 'Password is required'
            ]
        ]);
        return $p->process($source);
    }
}

(new FormController)->handle();

表单如下

<form method="POST" action="<?= $_SERVER['PHP_SELF'] ?>" accept-charset="UTF-8">
    <input class="span3" placeholder="Username" type="text" name="username" value="<?= (isset($username)) ? $username : '' ?>" /><br />
    <?= (isset($inputResult['errors']['username'])) ? 'Error: ' . $inputResult['errors']['username'] :''; ?><br />
    <input class="span3" placeholder="Password" type="password" name="password" /><br />
    <?= (isset($inputResult->errors->password)) ? 'Error: ' . $inputResult->errors->password :''; ?><br />
    <button class="btn-info btn" type="submit">Login</button>
</form>