1 回答

TA貢獻1804條經(jīng)驗 獲得超3個贊
我終于找到了一個聰明,清晰的方法來完成這個!該解決方案使用extract內(nèi)置函數(shù)。
雖然我不再需要它,因為我使用 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只會提取這些變量,而不會覆蓋其他變量。因此,上面的代碼沒有風(fēng)險。
- 1 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報