fresh / vich-uploader-serialization-bundle
提供 VichUploaderBundle 和 JMSSerializerBundle 之间的集成。
Requires
- php: >=7.3.0
- doctrine/cache: ^1.11
- doctrine/common: ^2.11|^3.0
- doctrine/persistence: ^1.3|^2.0
- jms/serializer-bundle: ^3.7|v4.0
- monolog/monolog: ^2.0
- symfony/config: ^5.0|^6.0
- symfony/dependency-injection: ^5.0|^6.0
- symfony/property-access: ^5.0|^6.0
- symfony/routing: ^5.0|^6.0
- vich/uploader-bundle: ^1.16
Requires (Dev)
- escapestudios/symfony2-coding-standard: ^3.12
- phpstan/phpstan: ^1.8
- phpstan/phpstan-doctrine: ^1.3
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^9.5
- symfony/yaml: ^5.0|^6.0
This package is auto-updated.
Last update: 2024-09-07 15:07:43 UTC
README
📦 提供了 VichUploaderBundle 和 JMSSerializerBundle 之间的集成。允许在序列化过程中生成实体字段(映射了 @Vich
和 @JMS
注解)的全局或相对 URI。
要求 🧐
- 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 文件。