Tôi có vấn đề nhỏ với Loại tùy chỉnh trong trường của biểu mẫu: Tôi đang cố gắng thêm "Loại hình ảnh" liên quan đến thực thể "Hình ảnh", có "url" và "alt" làm biến.
tôi nhận được lỗi này:Thêm một ImageType bên trong một biểu mẫu: "không thể đọc chỉ mục ... không triển khai ArrayAccess"?
Không thể đọc chỉ số "url" từ đối tượng của loại "Proxies__CG __ \ OC \ PlatformBundle \ Entity \ Image" vì nó không thực hiện \ ArrayAccess.
Đây là Type:
<?php
// src/OC/PlatformBundle/Form/ImageType.php
namespace OC\PlatformBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class ImageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('url', TextType::class)
->add('alt', TextType::class)
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'OC\PlatformBundle\Entity\Image'
));
}
public function getName()
{
return 'oc_platformbundle_image';
}
}
Hình thức:
class AdvertType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class)
->add('date', DateType::class)
->add('categories', EntityType::class, array(
'class' => 'OCPlatformBundle:Category',
'choice_label' => 'name',
'multiple' => true
))
->add('image', ImageType::class)
->add('save', SubmitType::class, array('label' => 'Create Task')) ;
}
Và thực thể:
<?php
namespace OC\PlatformBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Image
*
* @ORM\Table(name="image")
* @ORM\Entity(repositoryClass="OC\PlatformBundle\Repository\ImageRepository")
*/
class Image
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="url", type="string", length=255)
*/
private $url;
/**
* @var string
*
* @ORM\Column(name="alt", type="string", length=255)
*/
private $alt;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set url
*
* @param string $url
*
* @return Image
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
* Get url
*
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* Set alt
*
* @param string $alt
*
* @return Image
*/
public function setAlt($alt)
{
$this->alt = $alt;
return $this;
}
/**
* Get alt
*
* @return string
*/
public function getAlt()
{
return $this->alt;
}
}
tôi không có bất kỳ Array trong lớp Image , vì vậy tôi không chắc chắn những gì ném vấn đề.
Bạn có thể cần phải thực hiện 'getParent() 'chức năng để biểu thị rằng bạn muốn điều này để mở rộng' EntityType 'class (Symfony \ Bridge \ Doctrine \ Form \ Type \ EntityType) –
@JasonRoman Cảm ơn, tôi đã chỉnh sửa bài viết của mình, tôi đã thêm' getParent() 'nhưng nó ném một lỗi. – Paul
Suy nghĩ về nó nhiều hơn, bạn sẽ không muốn nó là EntityType vì bạn có một biểu mẫu mới với nhiều trường và EntityType sẽ chỉ là một lựa chọn duy nhất mà bạn đang chọn. Bạn đã tạo mẫu Twig cho trường mới của mình chưa? –