我有一个 html 表单来保存 cakephp 中的项目。我想限制用户保存相同的项目名称。如果任何主体类型相同的项目名称,我在模型中应用了“唯一”验证,但如果有人在项目名称之前或之后输入带有空格的相同名称,它会接受它并存储到数据库中。这就是问题所在。我想在保存之前删除多余的空格。
请帮忙。
我有一个 html 表单来保存 cakephp 中的项目。我想限制用户保存相同的项目名称。如果任何主体类型相同的项目名称,我在模型中应用了“唯一”验证,但如果有人在项目名称之前或之后输入带有空格的相同名称,它会接受它并存储到数据库中。这就是问题所在。我想在保存之前删除多余的空格。
请帮忙。
从用户输入中删除空格的最佳位置,即在控制器级别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
,用户输入将在所有表单上被修剪
希望这可以帮助
就像@Prasantn Bebdra 的回答一样,因为提问者不知道在哪里以及如何使用trim()
.
要修剪来自控制器中 POST 的所有数据(就在调用之前Model->save()
),请执行以下操作:
foreach ($this->data as $key => $value) {
$this->data[$key] = trim($value);
}
您还可以Model
通过利用其中一个回调来使用它,例如beforeValidate()或beforeSave()在您的情况下,最好使用 beforeValidate,因为您可能还想在之后验证此数据。
您还应该通知用户输入将被修剪,并且可能还会在客户端(在 POST 之前)进行此类修剪 - 检查这个 StackOverflow 答案。
通过我的研究,我认为最好的解决方案是如果您的数据是数组格式,那么试试这个 => Stackoverflow: How to trim white spaces of array values in php
同时,如果您的数据不是数组,那么您可以简单地使用:
$data = trim($data);