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>