我有一个html表单来保存cakephp中的项目。我想限制用户保存相同的项目名称。如果任何正文类型的相同项目名称在模型中应用了“唯一”验证,但是如果有人在项目名称之前或之后输入相同的名称,则它接受它并存储到数据库中。问题就是问题。我想在保存之前删除多余的空格。
请帮忙。
答案 0 :(得分:8)
从用户输入中移除空格的最佳位置,即trim()
位于控制器级别的beforeFilter()
回调中。对于PHP5 +,数组函数array_walk_recursive()
使这项工作变得非常简单。
例如:
public function beforeFilter()
{
parent::beforeFilter();
// remove leading and trailing whitespace from posted data
if (!function_exists('trimItem')) {
function trimItem(&$item,$key){
if (is_string($item)){
$item = trim($item);
}
}
}
array_walk_recursive($this->request->data, 'trimItem');
}
将此代码放入AppController
,并在所有表单上修剪用户输入
希望这有帮助
答案 1 :(得分:3)
答案 2 :(得分:3)
正如@Prasantn Bebdra的答案的补充,因为提问者不知道在哪里以及如何使用trim()
。
修剪控制器中POST的所有数据(就在调用Model->save()
之前):
foreach ($this->data as $key => $value) {
$this->data[$key] = trim($value);
}
你也可以在Model
中使用{{1}}中的一个,例如callbacks或beforeValidate(),在你的情况下使用beforeValidate应该更好你可能还想在之后验证这些数据。
您还应该通知用户输入将被修剪,也可能在客户端进行此类修剪(在POST之前) - 检查beforeSave()。
答案 3 :(得分:0)
通过研究,我认为最好的解决方案是如果您的数据采用数组格式,然后尝试使用此=> Stackoverflow: How to trim white spaces of array values in php
同时,如果您的数据不是数组,那么您可以简单地使用:
$data = trim($data);