拥有以下实体:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
/**
* Address
*
* @ApiResource(
* collectionOperations={"get"={"method"="GET"}},
* itemOperations={"get"={"method"="GET"}}
* )
* @ORM\Table(name="address")
* @ORM\Entity
*/
class Address
{
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return string
*/
public function getLat(): string
{
return $this->lat;
}
/**
* @param string $lat
*/
public function setLat(string $lat): void
{
$this->lat = $lat;
}
/**
* @return string
*/
public function getLng(): string
{
return $this->lng;
}
/**
* @param string $lng
*/
public function setLng(string $lng): void
{
$this->lng = $lng;
}
/**
* @return string
*/
public function getStreet(): string
{
return $this->street;
}
/**
* @param string $street
*/
public function setStreet(string $street): void
{
$this->street = $street;
}
/**
* @return string
*/
public function getZipcode(): string
{
return $this->zipcode;
}
/**
* @param string $zipcode
*/
public function setZipcode(string $zipcode): void
{
$this->zipcode = $zipcode;
}
/**
* @return string
*/
public function getCity(): string
{
return $this->city;
}
/**
* @param string $city
*/
public function setCity(string $city): void
{
$this->city = $city;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @param string $description
*/
public function setDescription(string $description): void
{
$this->description = $description;
}
/**</h2>
* @var string
*
* @ORM\Column(name="lat", type="decimal", precision=10, scale=8, nullable=false)
*/
private $lat;
/**
* @var string
*
* @ORM\Column(name="lng", type="decimal", precision=10, scale=8, nullable=false)
*/
private $lng;
/**
* @var string
*
* @ORM\Column(name="street", type="string", length=255, nullable=false)
*/
private $street;
/**
* @var string
*
* @ORM\Column(name="zipcode", type="string", length=5, nullable=false)
*/
private $zipcode;
/**
* @var string
*
* @ORM\Column(name="city", type="string", length=255, nullable=false)
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=false)
*/
private $description;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
}
包含一行数据的表格:
我收到了这个错误:
&#34;输入&#34;:&#34; https://tools.ietf.org/html/rfc2616#section-10&#34;, &#34; title&#34;:&#34;发生错误&#34;, &#34; detail&#34;:&#34;类型错误:App \ Entity \ Address :: getLat()的返回值必须是string类型,返回null&#34;,
我的错在哪里?使用Symfony 4.0。
答案 0 :(得分:15)
getter getLat
的返回类型为hint string
,这意味着只接受实际的字符串值(也就是说:没有空值!),因为接受了返回值。
您没有显示实际使用该实体的代码,但如果没有以不同的方式定义,它基本上归结为null
对象中每个属性的默认值。
看看这个例子:
$address = new Address();
// the following lines will produce an error in your example
// because your return type hint doesn't allow null values
$address->getId(); // returns null
$address->getStreet(); // returns null
$address->getLat(); // returns null
$address->setLat("4.56789");
$address->getLat(); // returns "4.56789"
有关学说的说明:
如果数据库中的值设置正确,则在Doctrine填充实体后(例如,通过$address = $addressRepo->find(123);
),您将不会遇到此问题。它应该只在你自己创建一个新实体然后尝试使用getter方法时才会发生。
可能的解决方案:
1。)允许空值作为返回值。使用问号添加返回类型提示,如下所示:
/**
* @return string|null
*/
public function getLat(): ?string
{
return $this->lat;
}
但是如果你这样做,你的代码必须准备好处理这些方法的空值!
2.。)在对象中使用正确的数据类型定义默认值:
/**
* @var string
*
* @ORM\Column(name="lat", type="decimal", precision=10, scale=8, nullable=false)
*/
private $lat = "";
您的代码必须准备好处理空字符串作为返回值!或者,您也可以在构造函数方法中定义默认值。
3。)通过使这些属性成为构造函数的参数来要求这些属性可用:
public function __constructor(string $lat, string $lng /*, add the other required properties */) {
$this->lat = $lat;
$this->lng = $lng;
// ... additional properties here ...
}
在这种情况下,必须在使用new Address(/* parameters go here */);
创建对象时提供值。
答案 1 :(得分:-1)
Symfony 5:
public function getSomething(): ?string
{
return $this->something;
}
public function setSomething(string $something): self
{
$this->something= $something;
return $this;
}
只需像这样从(string $ something)中删除字符串,它应该可以工作,对我有用
public function getSomething(): ?string
{
return $this->something;
}
public function setSomething($something): self
{
$this->something= $something;
return $this;
}