Php laravel控制器中的微调输入
我的应用程序由于字符串被存储在数据库中而出错,中间有两个空格,没有被适当修剪。 在我的控制器中,我使用了laravel的验证器,我相信它使用了trimStrings中间件来处理修剪输入,但是我的代码仍然在数据库中存储带有双空格的字符串 以下是我的控制器代码:Php laravel控制器中的微调输入,php,laravel,Php,Laravel,我的应用程序由于字符串被存储在数据库中而出错,中间有两个空格,没有被适当修剪。 在我的控制器中,我使用了laravel的验证器,我相信它使用了trimStrings中间件来处理修剪输入,但是我的代码仍然在数据库中存储带有双空格的字符串 以下是我的控制器代码: public function update(Request $request, $id) { $room = Room::find($request->roomid); $data = $this->vali
public function update(Request $request, $id)
{
$room = Room::find($request->roomid);
$data = $this->validate($request, [
'name' =>'required|string',
'volume' => 'required',
'newrefurb'=> 'required'
]);
$updateroom = $room->updateRoom($data);
}
以下是我的模型代码:
public function updateRoom($data)
{
$this->name = $data['name'];
$this->volume = $data['volume'];
$this->newrefurb = $data['newrefurb'];
$this->save();
return $this->id;
}
这里,名称字段是字符串中间包含双空白的问题。
处理双间距字符串的正确方法是什么?
< P> <代码> TrimStry中间件从字符串的开始或结束修剪空间,而不是在中间。以下是一个帮助器,您可以创建并使用它从字符串中的任何位置修剪额外的空格:function trimExtraSpaces($text)
{
return preg_replace('/\s+/', ' ', $text);
}
--编辑
正如下面的注释所建议的那样,为了在没有额外空间的情况下存储它,您可以对列创建一个变体,因此在您的模型中,放置以下内容:
public function setNameAttribute($value)
{
$this->attributes['name'] = trimExtraSpaces($value);
}
<代码> TrimStrys/Cudio>中间件从字符串的开始或结束修剪空间,而不是在中间。以下是一个帮助器,您可以创建并使用它从字符串中的任何位置修剪额外的空格:
function trimExtraSpaces($text)
{
return preg_replace('/\s+/', ' ', $text);
}
--编辑
正如下面的注释所建议的那样,为了在没有额外空间的情况下存储它,您可以对列创建一个变体,因此在您的模型中,放置以下内容:
public function setNameAttribute($value)
{
$this->attributes['name'] = trimExtraSpaces($value);
}
正如@nakov的回答中所提到的,这是因为
TrimStrings
只使用php函数,该函数将从字符串的开头和结尾去除空白
如果希望TrimStrings
中间件也将所有双空格替换为一个空格,则可以向TrimStrings
中间件添加以下方法:
/**
* Transform the given value.
*
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
if (in_array($key, $this->except, true) || !is_string($value)) {
return $value;
}
return trim(str_replace(' ', ' ', $value));
}
正如@nakov的回答中所提到的,这是因为
TrimStrings
只使用php函数,该函数将从字符串的开头和结尾去除空白
如果希望TrimStrings
中间件也将所有双空格替换为一个空格,则可以向TrimStrings
中间件添加以下方法:
/**
* Transform the given value.
*
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
if (in_array($key, $this->except, true) || !is_string($value)) {
return $value;
}
return trim(str_replace(' ', ' ', $value));
}
您可以将其添加为您特别需要的属性的集合变量。@gingaWRATH我遇到的问题是,在我的刀片文件中使用{{room->name}}时,这似乎会删除两个白色间距,因此,当在我的雄辩查询中使用该值时,它与数据库中存储的值不匹配Yes@StevenBendell这是GingaWRATH建议的,所以现在看看我的编辑。您可以将其添加为您特别需要的属性的集变量。@GingaWRATH我遇到的问题是,当使用{room->name}在我的blade文件中,这似乎删除了双白间距,因此当在我的雄辩查询中使用该值时,它与数据库中存储的内容不匹配Yes@StevenBendell这是GingaWRATH建议的,所以现在看看我的编辑。我遇到的问题是,当使用{{room->name}在我的blade文件中,这似乎删除了双白间距,因此当在我的雄辩查询中使用该值时,它与数据库中存储的内容不匹配我遇到的问题是,在我的blade文件中使用{room->name}时,这似乎删除了双白间距,因此,当我在雄辩的查询中使用该值时,它与数据库中存储的内容不匹配