Mir*_*son 3 symfony api-platform.com
有以下实体:
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;
}
Run Code Online (Sandbox Code Playgroud)
包含一行数据的表:
我收到了这个错误:
"type":" https://tools.ietf.org/html/rfc2616#section-10 ","title":"发生错误","详细信息":"输入错误:App\Entity\Address的返回值:: getLat()必须是string类型,返回null",
我的错在哪里?使用Symfony 4.0.
Tob*_* Xy 16
getter getLat
具有返回类型提示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"
Run Code Online (Sandbox Code Playgroud)
关于学说的说明:
如果数据库中的值设置正确,则在Doctrine填充实体后(例如,通过$address = $addressRepo->find(123);
),您将不会遇到此问题.只有在您自己创建新实体然后尝试使用getter方法时才会发生这种情况.
可能的解决方案:
1.)允许空值作为返回值.使用问号添加返回类型提示,如下所示:
/**
* @return string|null
*/
public function getLat(): ?string
{
return $this->lat;
}
Run Code Online (Sandbox Code Playgroud)
但是如果你这样做,你的代码必须准备好处理来自这些方法的空值!
2.)在对象中使用正确的数据类型定义默认值:
/**
* @var string
*
* @ORM\Column(name="lat", type="decimal", precision=10, scale=8, nullable=false)
*/
private $lat = "";
Run Code Online (Sandbox Code Playgroud)
您的代码必须准备好处理空字符串作为返回值然后!或者,您也可以在构造函数方法中定义默认值.
3.)通过使它们成为构造函数的参数,要求这些属性可用:
public function __constructor(string $lat, string $lng /*, add the other required properties */) {
$this->lat = $lat;
$this->lng = $lng;
// ... additional properties here ...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须在创建对象时提供值new Address(/* parameters go here */);
.