fresh/vich-uploader-serialization-bundle

提供 VichUploaderBundle 和 JMSSerializerBundle 之间的集成。

资助包维护!
fre5h

安装次数: 183,636

依赖项: 0

建议者: 0

安全性: 0

星标: 46

关注者: 3

分支: 11

开放问题: 5

类型:symfony-bundle

v3.3.0 2022-08-15 06:11 UTC

README

📦 提供了 VichUploaderBundleJMSSerializerBundle 之间的集成。允许在序列化过程中生成实体字段(映射了 @Vich@JMS 注解)的全局或相对 URI。

Scrutinizer Quality Score Build Status CodeCov License Latest Stable Version Total Downloads StyleCI Gitter

要求 🧐

  • PHP 7.3, 7.4, 8.0, 8.1, 8.2
  • Symfony 5.0, 5.1, 5.2, 5.3, 5.4, 6.0, 6.1, 6.2

安装 🌱

composer req fresh/vich-uploader-serialization-bundle='~3.3'

使用 🧑‍🎓

将以下类添加到您的实体类的 use 部分。

use Fresh\VichUploaderSerializationBundle\Annotation as Fresh;

该包提供了两个注解,允许在实体中序列化 @Vich\UploadableField 字段。首先,您必须将 @Fresh\VichSerializableClass 添加到具有可上传字段的实体类。然后,您必须将 @Fresh\VichSerializableField 注解添加到您想要序列化的可上传字段。

@Fresh\VichSerializableClass 注解没有任何选项。
@Fresh\VichSerializableField 注解有一个必需的选项 value(或 field),其值应链接到具有 @Vich\UploadableField 注解的字段。它可以设置如下 @Fresh\VichSerializableField("photoFile")@Fresh\VichSerializableField(field="photoFile")。还有一个可选的 includeHost 选项,它不是必需的,默认设置为 true。但如果你需要,你可以排除主机从生成的 URI,只需使用以下注解变体 @Fresh\VichSerializableField("photoFile", includeHost=false)

别忘了,为了序列化 Vich 可上传字段,它们也应该用 @JMS 注解标记以进行序列化。

默认生成的 URI

{
  "photo": "http://example.com/uploads/users/photos/5659828fa80a7.jpg",
  "cover": "http://example.com/uploads/users/covers/456428fa8g4a8.jpg",
}

includeHost 设置为 false 时的生成 URI

{
  "photo": "/uploads/users/photos/5659828fa80a7.jpg",
  "cover": "/uploads/users/covers/456428fa8g4a8.jpg",
}

具有序列化可上传字段的实体示例

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Fresh\VichUploaderSerializationBundle\Annotation as Fresh;
use JMS\Serializer\Annotation as JMS;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @ORM\Table(name="users")
 * @ORM\Entity()
 *
 * @Vich\Uploadable
 * 
 * @Fresh\VichSerializableClass
 */
class User
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", length=255)
     *
     * @JMS\Expose
     * @JMS\SerializedName("photo")
     *
     * @Fresh\VichSerializableField("photoFile")
     */
    private $photoName;

    /**
     * @var File
     *
     * @JMS\Exclude
     *
     * @Vich\UploadableField(mapping="user_photo_mapping", fileNameProperty="photoName")
     */
    private $photoFile;
    
    /**
     * @var string
     *
     * @ORM\Column(type="string", length=255)
     *
     * @JMS\Expose
     * @JMS\SerializedName("cover")
     *
     * @Fresh\VichSerializableField("coverFile", includeHost=false)
     */
    private $coverName;

    /**
     * @var File
     *
     * @JMS\Exclude
     *
     * @Vich\UploadableField(mapping="user_cover_mapping", fileNameProperty="coverName")
     */
    private $coverFile;    
}

不要犯错误!

以下是一个 错误使用 提供的注解的附加示例,以引起你的注意。仅使用 @Fresh\VichSerializableField 与映射了 @ORM\Column 的字段,因为该字段映射到数据库并保留存储文件的名称。不要与也映射了 @Vich\UploadableField 的字段一起使用 @Fresh\VichSerializableField,这是一个错误的使用案例,将引发异常!

因此,以下示例是提供的注解的 错误使用!不要这样做!

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Fresh\VichUploaderSerializationBundle\Annotation as Fresh;
use JMS\Serializer\Annotation as JMS;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @ORM\Table(name="users")
 * @ORM\Entity()
 *
 * @Vich\Uploadable
 * 
 * @Fresh\VichSerializableClass
 */
class User
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", length=255)
     */
    private $photoName;

    /**
     * @var File
     *
     * !!! Next three annotations should be moved to the `photoName` property
     * @JMS\Expose
     * @JMS\SerializedName("photo")
     * @Fresh\VichSerializableField("photoFile")
     *
     * !!! This annotation should be left here
     * @Vich\UploadableField(mapping="user_photo_mapping", fileNameProperty="photoName")
     */
    private $photoFile;  
}

贡献 🤝

查看 CONTRIBUTING 文件。