php - 在 symfony 上构建表单,属性不存在
问题描述
我正在做一个 symfony 项目,我想创建一个表单类。但是当我创建生成类时PropertyType
,它没有找到,并且我在编辑方法中有错误:
Property "postalCode" does not exist in class "App\Entity\Property"
我的代码:
/**
* @Route("/admin/{id}", name="admin.property.edit")
* @param Property $property
* @return Response
*/
public function edit (Property $property) : Response
{
$form = $this->createForm(PropertyType::class, $property);
return $this->render('admin/property/edit.html.twig', [
'property' => $property,
'form' => $form->createView()
]);
}
和属性类(实体):
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Cocur\Slugify\Slugify;
/**
* @ORM\Entity(repositoryClass="App\Repository\PropertyRepository")
*/
class Property
{
const HEAT = [
0 => 'Electrique',
1 => 'Gaz'
];
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $title;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\Column(type="integer")
*/
private $surface;
/**
* @ORM\Column(type="integer")
*/
private $rooms;
/**
* @ORM\Column(type="integer")
*/
private $bedrooms;
/**
* @ORM\Column(type="integer")
*/
private $floor;
/**
* @ORM\Column(type="integer")
*/
private $price;
/**
* @ORM\Column(type="integer")
*/
private $heat;
/**
* @ORM\Column(type="string", length=255)
*/
private $city;
/**
* @ORM\Column(type="string", length=255)
*/
private $address;
/**
* @ORM\Column(type="string", length=255)
*/
private $postal_code;
/**
* @ORM\Column(type="boolean", options={"default": false})
*/
private $sold = false;
/**
* @ORM\Column(type="datetime")
*/
private $created_at;
public function __construct ()
{
$this->created_at = new \DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function getSlug() : string
{
return (new Slugify())->slugify($this->title);
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getSurface(): ?int
{
return $this->surface;
}
public function setSurface(int $surface): self
{
$this->surface = $surface;
return $this;
}
public function getRooms(): ?int
{
return $this->rooms;
}
public function setRooms(int $rooms): self
{
$this->rooms = $rooms;
return $this;
}
public function getBedrooms(): ?int
{
return $this->bedrooms;
}
public function setBedrooms(int $bedrooms): self
{
$this->bedrooms = $bedrooms;
return $this;
}
public function getFloor(): ?int
{
return $this->floor;
}
public function setFloor(int $floor): self
{
$this->floor = $floor;
return $this;
}
public function getPrice(): ?int
{
return $this->price;
}
public function getFormattedPrice() : string
{
return \number_format($this->price, 0, '', ' ');
}
public function setPrice(int $price): self
{
$this->price = $price;
return $this;
}
public function getHeat(): ?int
{
return $this->heat;
}
public function getHeatType(): string
{
return self::HEAT[$this->heat];
}
public function setHeat(int $heat): self
{
$this->heat = $heat;
return $this;
}
public function getCity(): ?string
{
return $this->city;
}
public function setCity(string $city): self
{
$this->city = $city;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(string $address): self
{
$this->address = $address;
return $this;
}
public function getPostalCode(): ?string
{
return $this->postal_code;
}
public function setPostalCode(string $postal_code): self
{
$this->postal_code = $postal_code;
return $this;
}
public function getSold(): ?bool
{
return $this->sold;
}
public function setSold(bool $sold): self
{
$this->sold = $sold;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeInterface $created_at): self
{
$this->created_at = $created_at;
return $this;
}
}
用 symfony 生成的 PropertyType 类。
<?php
namespace App\Form;
use App\Entity\Property;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PropertyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('description')
->add('surface')
->add('rooms')
->add('bedrooms')
->add('floor')
->add('price')
->add('heat')
->add('city')
->add('address')
->add('postal_code')
->add('sold')
->add('created_at')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Property::class,
]);
}
}
解决方案
我相信这是因为你的吸气剂不匹配。所以而不是:
public function getPostalCode(): ?string
{
return $this->postal_code;
}
尝试:
public function getPostal_code(): ?string
{
return $this->postal_code;
}
为您created_at
和您的二传手做同样的事情。
使用ccoding 标准(此处为 CamelCase)将使您的生活更轻松。所以postalCode
,而不是postal_code
等...
推荐阅读
- azure - 两个 Azure Web 应用的一个 CNAME
- javascript - Redux-Toolkit 和 React Hooks - 存储更改不会触发重新渲染
- c# - 围绕接口创建包装器并获取调用的方法/参数
- php - 使用 PHP 和 jTree 的动态树
- android - Nativescript-Vue 将数组的长度传递给 SCSS 变量
- python-3.x - 为什么 SQLAlchemy 没有出现在 `pip3 search SQLAlchemy` 的搜索结果中?
- javascript - 异步 XMLHttpRequest 响应附加到父元素
- java - 向下滚动方法选择 Appium 中的文本
- python - 在 python 烧瓶服务器中,我可以在哪里临时存储文件字节数据?
- php - 列存在,但迁移时返回 SQLSTATE[42000]:语法错误或访问冲突:1072 表中不存在键列