ServerBag не может быть преобразован в строку при изменении ресурса - PullRequest
0 голосов
/ 18 апреля 2019

Я не совсем понимаю, почему это происходит, но он говорит мне, что ServerBag не может быть преобразован в символы, я не совсем понимаю, что такое ServerBag и почему эта ошибка возникает.

Ошибка:

enter image description here

… \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Str.php354

enter image description here

Соответствующий код (обновление функции):

   $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 ()):

enter image description here

1 Ответ

1 голос
/ 18 апреля 2019

Проблема в ваших условиях "если".

Решение

if ($request->input('port')) // <----
{
    $host->port = $request->port;
}

Попробуйте вместо этого:

if ($request->has('port')) // <----
{
    $host->port = $request->port;
}

Обновление

Вы должны сначала проверить, существует ли желаемый ввод в запросе Из документов:

Определение наличия входного значения

Вы должны использовать метод has, чтобы определить, присутствует ли значение в запрос. Метод has возвращает true, если значение присутствует в запрос:

if ($request->has('name')) {
    //
}

Тогда вы должны получить ввод.

Теперь относимся к методам:

$ request-> есть ()

При выполнении $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-> вход (...)

При выполнении $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()). Проверьте эту статью для более подробной информации.

Это вернет string, array или null.

Теперь именно здесь находится ошибка (как вы можете проверить, присутствует ли ваша ошибка в трассировке). Похоже, что этот метод пытается обработать данный объект как строку, чтобы разрешить оператор if (я действительно не знаю, потому что у меня нет доступа к подробным сведениям об ошибках).

Итак, сначала проверьте, имеет ли запрос определенный атрибут, а затем извлекает ввод , чтобы сделать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...