gpt4 book ai didi

php - 在 symfony 上构建表单,属性不存在

转载 作者:行者123 更新时间:2023-12-04 17:36:30 26 4
gpt4 key购买 nike

我正在做一个 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,
]);
}
}

最佳答案

我相信这是因为您的 getter 不匹配。所以不是:

    public function getPostalCode(): ?string
{
return $this->postal_code;
}

尝试:

public function getPostal_code(): ?string
{
return $this->postal_code;
}

对你的 created_at 和你的 setter 做同样的事情。

使用 ccoding standard (此处为 CamelCase)将使您的生活更轻松。所以 postalCode 而不是 postal_code 等...

关于php - 在 symfony 上构建表单,属性不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com