我不太了解为什么会发生这种情况,但是它告诉我ServerBag无法转换为字符,我不太了解ServerBag是什么以及为什么会发生此错误。
错误:
... \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Str.php354
相关代码(功能更新):
$request->validate([
'username' => 'required|string|max:50',
'password' => 'required|string|max:50',
'port' => 'max:5',
'server' => 'string|nullable|max:50',
'hostname' => 'string|nullable|max:100',
'ipvmware' => 'string|nullable|ipv4',
'obs' => 'string|nullable|max:500',
]);
$host = Host::find($id);
$host->username = $request->username;
$host->password = $request->password;
if($request->input('port')){
$host->port = $request->port;
}
if($request->input('server')){
$host->server = $request->server;
}
if($request->input('hostname')){
$host->hostname = $request->hostname;
}
if($request->input('ipvmware')){
$host->ipvmware = $request->ipvmware;
}
if($request->input('obs')){
$host->obs = $request->obs;
}
$host->estado = 1;
$host->save();
如果删除以下几行,该代码将起作用。
$request->validate([
'username' => 'required|string|max:50',
'password' => 'required|string|max:50',
'port' => 'max:5',
'server' => 'string|nullable|max:50',
'hostname' => 'string|nullable|max:100',
'ipvmware' => 'string|nullable|ipv4',
'obs' => 'string|nullable|max:500',
]);
$host = Host::find($id);
$host->username = $request->username;
$host->password = $request->password;
$host->estado = 1;
$host->save();
dd($ request-> all()):
答案 0 :(得分:1)
问题出在您的“如果”情况下。
if ($request->input('port')) // <----
{
$host->port = $request->port;
}
尝试以下方法:
if ($request->has('port')) // <----
{
$host->port = $request->port;
}
您应该首先检查请求中是否存在所需的输入。从文档中:
确定是否存在输入值
您应该使用has方法来确定是否存在值 请求。如果值出现在has方法中,则返回true 请求:
if ($request->has('name')) { // }
然后您应该获得输入。
现在,与方法有关:
进行$request->has(...)
时,您正在检查请求是否包含给定的输入项键(或多个键)。该方法就是这样做的:
# trait InteractsWithInput.php
/**
* Determine if the request contains a given input item key.
*
* @param string|array $key
* @return bool
*/
public function has($key)
{
$keys = is_array($key) ? $key : func_get_args();
$input = $this->all();
foreach ($keys as $value) {
if (! Arr::has($input, $value)) {
return false;
}
}
return true;
}
如您所见,它只是返回一个布尔值。
执行$request->input(...)
时,您尝试从请求中获取输入:
# trait InteractsWithInput.php
/**
* Retrieve an input item from the request.
*
* @param string|null $key
* @param string|array|null $default
* @return string|array|null
*/
public function input($key = null, $default = null)
{
return data_get(
$this->getInputSource()->all() + $this->query->all(), $key, $default
);
}
此方法的作用是功能更强大,因为它可以使用点表示法(而不是$request->get()
来获取嵌套数据)。检查this article了解更多详细信息。
这将返回string
,array
或null
。
现在这是错误所在的位置(您可以检查是否在错误跟踪中)。似乎此方法试图将给定对象视为字符串,以解决if语句(我真的不知道,因为没有访问权限,请完整了解错误详细信息)。
因此,首先,检查请求是否具有特定属性,然后检索输入以执行所需的操作。