Symfony 4 Entity getter и setter возвращают значения - PullRequest
0 голосов
/ 16 октября 2018

Когда я получаю значения из базы данных, где поле равно нулю, я получаю следующую ошибку:

Возвращаемое значение App \ Entity \ Settings :: getDescription () должно иметь тип string, nullвозвращается

Значение сохраняется как ноль.Ниже приведен метод get поля.

public function getDescription(): string
{
    return $this->description;
}

Когда я удаляю код после «двоеточия», я не получаю вышеуказанную ошибку.Любое решение для решения этой проблемы?

1 Ответ

0 голосов
/ 16 октября 2018

Вы указываете тип возврата string, значение которого null не совпадает.Помимо полного удаления типа возврата, есть много способов справиться с этим:

  1. Сделать тип возвращаемого значения необязательным

    public function getDescription(): ?string
    

Это будетallow null или строка, которая мгновенно решает вашу проблему.Недостатком является то, что всякий раз, когда вы звоните getDescription(), вам, возможно, придется иметь дело с этим нулем, приводящим к уродливому коду, подобному этому:

$description = $entity->getDescription();
if (null === $description) {
    // Do something with null
}
// Do something

С описанием это, вероятно, не проблема.Если у вас есть другие данные, такие как DateTime, получение null может быть проблематичным, если вы хотите отформатировать дату-время или сравнить его с другим значением даты-времени.

Вот почему второй вариант может иметь смысл:

Убедитесь, что значение заполнено:

public function getDescription(): string
{
    return$this->description ?? '';
}

или:

private $description = '';

public function getDescription(): string
{
    return$this->description;
}

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

Существуют и другие способы решения этой проблемы, но то, имеют ли они смысл, во многом зависит от контекста, в котором вы работаете. Эти 2, приведенные выше, являются довольно распространенными способами решения вашей проблемы: nullable returnвведите или явное значение по умолчанию, определенное в вашей базе данных или в вашем коде вместо нуля.

...