2017-04-27 66 views
2

微调从形式价值,我想,当我使用Yii::$app->request->post('somefield')的价值已经被清理修剪从表单张贴(以及preferrably还设置空字符串为空)的所有值,这样。那可能吗?在使用...request->post()之前是否有修改POST值的钩子?Yii2:在POST阶段

我知道有this解决方案,但我想这样做的价值模型最终甚至之前...

回答

0

使用trim validator。实际上它并不验证字段,但它修剪它们:

public function rules() 
    { 
     return [ 
      ['myfield', 'trim'] 
     ]; 
    } 

空白字段设置为null,我会create a custom validator,一旦再次,它不验证,但如果该字段为空,将其设置到null

public function rules() 
    { 
     return [ 
      ['myfield', 'myValidator'], 
     ]; 
    } 

    public function myValidator() 
    { 
     if ($this->myfield == '') 
      $this->myfield = null; 
    } 
} 
+0

你没看过我question.I说* *前值模型中的结束,并确认存在 - 甚至当我用'$ APP->请求 - >后(“somefield”)'...! – TheStoryCoder

+0

我知道,但我认为,加载它们来使我们这些验证器是最干净的解决方案。这是我的建议,不是唯一有效的解决方案 – gmc

0

我没有看到Yii的帮助。但你可以做到以下几点,你叫Yii::$app->request->post('somefield')Yii::$app->request->post()前:

$_POST = array_map('trim', $_POST); 

,或者如果你有嵌套表格数据:

array_walk_recursive($_POST, function (&$val, $index) { 
    $val = trim($val); 
    // maybe also: 
    // if(empty($val)) $val = null; 
}); 

如果你想这对任何发布的数据,你可以将代码放在一个beforeAction处理程序(在控制器,模块或应用程序中)。我不认为这是一个好主意,但一如既往,这取决于你的情况。