2

画像ファイルを管理できる必要があるカスタム エンティティ (キャンペーン) があるので、管理者経由でアップロードできます。例として 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';
    }
}

ご助力ありがとうございます!

4

1 に答える 1

3

私はあなたと同じエラーがありました。この回答に従って修正しました: Symfony 2.2 upload files

小枝テンプレートのフォームタグに「{{ form_enctype(upload_form) }}」を追加する必要があります。「upload_form」をフォーム変数に置き換えます。

于 2013-12-19T11:42:58.097 に答える