1 回答
TA贡献1804条经验 获得超3个赞
我终于找到了一个聪明,清晰的方法来完成这个!该解决方案使用extract内置函数。
虽然我不再需要它,因为我使用 Laravel 进行验证,但我仍然想分享答案,以便它可以帮助其他人。
解决方案
Class Form {
#code
...
public function getFieldsCompacted() {
$compactedFields = [];
foreach(array_keys($this->fields) as $key) {
$compactedFiels["$key"] = $this->fields["$key"];
}
return $compactedFields;
}
}
然后,在代码上:
require_once '/path/to/Form.php';
$inputs = ['olympiad', 'test_type', 'year', 'level', 'test', 'answer_sheet'];
$Form = new Form;
$Form->addFields($inputs);
extract($Form->getFieldsCompacted());
这样我可以做到:
$olympiad->required(true)->type('select')->inValues($olyimpiadsArray)->label('Olimpíada')->errorMessage('some error message here');
$test_type->required(true)->type('select')->inValues($testTypeArray)->errorMessage('bla bla');
$level->required(true)->type('select')->inValues(['Nacional', 'Regional'])->label('Nível')->errorMessage('sample error message');
$year->required(true)->type('int')->range(1998, 2019)->label('Ano')->errorMessage('another error message');
$test->type('file')->label('Prova')->allowedExtensions(['pdf'])->errorMessage('bla bla');
$answersheet->type('file')->label('Gabarito')->allowedExtensions(['pdf'])->errorMessage('bla bla bla');
而不是做:
$Form->fields['olympiad']->required(true)->type('select')->inValues($olyimpiadsArray)->label('Olimpíada')->errorMessage('some error message here');
$Form->fields['test_type']->required(true)->type('select')->inValues($testTypeArray)->errorMessage('bla bla');
$Form->fields['level']->required(true)->type('select')->inValues(['National', 'State'])->label('Nível')->errorMessage('sample error message');
$Form->fields['year']->required(true)->type('int')->range(1998, 2019)->label('Ano')->errorMessage('another error message');
$Form->fields['test']->type('file')->label('Prova')->allowedExtensions(['pdf'])->errorMessage('bla bla');
$Form->fields['answersheet']->type('file')->label('Gabarito')->allowedExtensions(['pdf'])->errorMessage('bla bla bla');
编辑:
RiggsFolly 指出使用extract. 我完全同意使用extractin$_POST和$_GET. 但是,这里的情况并非如此,因为要提取的变量的定义如您在
$inputs = ['olympiad', 'test_type', 'year', 'level', 'test', 'answer_sheet'];. 因此,extract只会提取这些变量,而不会覆盖其他变量。因此,上面的代码没有风险。
- 1 回答
- 0 关注
- 139 浏览
添加回答
举报