【问题标题】:Upload files in Symfony form以 Symfony 形式上传文件
【发布时间】:2021-03-24 19:42:42
【问题描述】:

我在从表单上传文件时遇到问题。 我做错了什么?

错误是:

“App\Entity\Image”类型的预期参数,“实例 Symfony\Component\HttpFoundation\File\UploadedFile" 在属性中给出 路径“文件”。

Form->handleRequest(object(Request)) in C:\xampp\htdocs\biuro\src\Controller\OfferController.php(第 29 行)

我的代码:

类OfferType:

class OfferType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class)
            ->add('description', TextareaType::class)
            ->add('files',FileType::class, [
                'multiple' => true
                ]
            )

类OfferController:

 class OfferController extends AbstractController
{
   public function createOffer(Request $request) {
 
        $offer = new Offer();
        $form = $this->createForm(OfferType::class, $offer);
        $form->handleRequest($request);

类实体Offer:

class Offer
{
    /**
     * @ORM\OneToMany(targetEntity="Image", mappedBy="offer", cascade={"persist"})
     */
    private $files;

模板:

<table>
    <tbody>
    <tr>
        <th>Nazwa:</th>
        <td>{{ form_widget(form.name) }}</td>
    </tr>
    <tr>
        <th>Opis:</th>
        <td>{{ form_widget(form.description) }}</td>
    </tr>
    <tr>
        <th>Zdjęcia:</th>
        <td>{{ form_widget(form.files) }}</td>
    </tr>
    <tr>
        <th></th>
        <td>{{ form_widget(form.save) }}</td>
    </tr>
    </tbody>
</table>

【问题讨论】:

    标签: php symfony file-upload symfony-forms


    【解决方案1】:

    这是因为表单中files 字段提供的文件是UploadedFile 类型,而映射到该字段的实体属性Offer::$files 需要Image 类型的对象(与UploadedFile,导致您遇到的错误)。没有帮助,Symfony 不知道如何将接收到的UploadedFile 对象转换 为预期的Image 对象。您必须自己告诉 Symfony 如何执行此操作。

    幸运的是,Symfony Form 组件以 Data Transformers 的形式提供了一种相对简单的方法来完成此操作。 Here's an example 如何为您的用例实现这样的转换器。

    【讨论】:

    【解决方案2】:

    我推荐捆绑包VichUploader

    composer require vich/uploader-bundle
    
    # config/services.yaml
    parameters:
        app.path.product_images: /uploads/images/products
        # ...
    
    # config/packages/vich_uploader.yaml
    vich_uploader:
        # ...
        mappings:
            product_images:
                uri_prefix:         '%app.path.product_images%'
                upload_destination: '%kernel.project_dir%/public%app.path.product_images%'
    ``
    

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多