画像ファイルを管理できる必要があるカスタム エンティティ (キャンペーン) があるので、管理者経由でアップロードできます。例として Taxon エンティティに従ってみました。問題は、管理フォームから新しいキャンペーンを作成しようとすると、次のエラーが返されることです:
Catchable Fatal Error: Sylius\Bundle\CoreBundle\Entity\Campaign::setFile() に渡される引数 1 は、SplFileInfo のインスタンスである必要があります。指定された文字列は、/NetBeansProjects/tiendacoleman/vendor/symfony/symfony/src/Symfony/Component で呼び出されます350 行目の /PropertyAccess/PropertyAccessor.php であり、/NetBeansProjects/tiendacoleman/src/Sylius/Bundle/CoreBundle/Entity/Campaign.php 100 行目に定義されています
namespace Sylius\Bundle\CoreBundle\Entity;
use Sylius\Bundle\CoreBundle\Model\ImageInterface;
use SplFileInfo;
use DateTime;
class Campaign implements ImageInterface
{
protected $id;
protected $campaign;
protected $link;
protected $isActive;
protected $campaignOrder;
/**
* @var SplFileInfo
*/
protected $file;
/**
* @var string
*/
protected $path;
/**
* @var \DateTime
*/
protected $createdAt;
/**
* @var \DateTime
*/
protected $updatedAt;
public function __construct()
{
$this->createdAt = new DateTime();
}
public function getId()
{
return $this->id;
}
public function getCampaign()
{
return $this->campaign;
}
public function setCampaign($campaign)
{
$this->campaign = $campaign;
}
public function getLink()
{
return $this->link;
}
public function setLink($link)
{
$this->link = $link;
}
public function getIsActive()
{
return $this->isActive;
}
public function setIsActive($isActive)
{
$this->isActive = $isActive;
}
public function getCampaignOrder()
{
return $this->campaignOrder;
}
public function setCampaignOrder($campaignOrder)
{
$this->campaignOrder = $campaignOrder;
}
public function hasFile()
{
return null !== $this->file;
}
public function getFile()
{
return $this->file;
}
public function setFile(SplFileInfo $file)
{
$this->file = $file;
}
public function hasPath()
{
return null !== $this->path;
}
public function getPath()
{
return $this->path;
}
public function setPath($path)
{
$this->path = $path;
}
public function getCreatedAt()
{
return $this->createdAt;
}
public function setCreatedAt(DateTime $createdAt)
{
$this->createdAt = $createdAt;
}
public function getUpdatedAt()
{
return $this->updatedAt;
}
public function setUpdatedAt(DateTime $updatedAt)
{
$this->updatedAt = $updatedAt;
}
}
これはフォームのコードです:
namespace Sylius\Bundle\CoreBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class CampaignType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('campaign', 'text', array(
'label' => 'sylius.form.campaign.name'
))
->add('link', 'text', array(
'label' => 'sylius.form.campaign.link'
))
->add('isActive', 'checkbox', array(
'label' => 'sylius.form.campaign.active'
))
->add('file','file',array(
'label' => 'sylius.form.campaign.file'
))
;
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'sylius_campaign';
}
}
ご助力ありがとうございます!