sirroland/liip-imagine-serialization-bundle

提供 LiipImagineBundle 和 JMSSerializerBundle 之间的集成。

安装: 105

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 7

类型:symfony-bundle

2.0.5 2019-07-16 12:09 UTC

This package is auto-updated.

Last update: 2024-09-16 23:42:54 UTC


README

Build Status Code Coverage Scrutinizer Code Quality Dependency Status License Latest Stable Version Total Downloads

SensioLabsInsight knpbundles.com

关于

提供 LiipImagineBundleJMSSerializerBundle 之间的集成。允许在序列化过程中生成实体字段的完整或相对 URI,这些字段通过 @Bukashk0zzz@JMS 注解映射。此外,捆绑包还支持 VichUploaderBundle 字段类型。

使用 Symfony Flex 安装

composer config extra.symfony.allow-contrib true
composer require bukashk0zzz/liip-imagine-serialization-bundle

不使用 Symfony Flex 安装

composer require bukashk0zzz/liip-imagine-serialization-bundle

将捆绑包添加到 app/AppKernel.php

$bundles = array(
	// ... other bundles
	new Bukashk0zzz\LiipImagineSerializationBundle\Bukashk0zzzLiipImagineSerializationBundle(),
);

配置

将以下内容添加到您的 config.yml

bukashk0zzz_liip_imagine_serialization:
    # Set true for generating url for vichUploader fields
    vichUploaderSerialize: false
    # Set true for generating url with host for vichUploader fields
    includeHost: false
    # Set true for adding original field value to object
    includeOriginal: false
    # Set true for adding host url to original value for vichUploader fields
    includeHostForOriginal: false
    # You can pass there your UrlNormalizer class that implements UrlNormalizerInterface
    originUrlNormalizer: null
    # You can pass there your UrlNormalizer class that implements UrlNormalizerInterface
    filteredUrlNormalizer: null

用法

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

use Bukashk0zzz\LiipImagineSerializationBundle\Annotation as Bukashk0zzz;

捆绑包提供了两个注解,允许在实体中序列化 URL 或 @Vich\UploadableField 字段。首先,您必须将 @Bukashk0zzz\LiipImagineSerializableClass 添加到具有图像字段的实体类中。然后,您必须将 @Bukashk0zzz\LiipImagineSerializableField 注解添加到您想要序列化的字段。

@Bukashk0zzz\LiipImagineSerializableClass 注解没有任何选项。
@Bukashk0zzz\LiipImagineSerializableField 注解有一个必需的选项 filter,其值应链接到 LiipImagine 过滤器。

可以设置如下 @Bukashk0zzz\LiipImagineSerializableField("photoFile")@Bukashk0zzz\LiipImagineSerializableField(filter="photoFile")。在这种情况下,filter 可以是过滤器的数组,此时序列化字段也将是数组。例如,如果您为 image 字段添加注解 @Bukashk0zzz\LiipImagineSerializableField(filter={"big", "small"}),那么您将得到

{
  "image": {
             "big": "/uploads/users/big/5659828fa80a7.jpg",
             "small": "/uploads/users/small/5659828fa80a7.jpg"
           }
}

还有另外两个选项

  • vichUploaderField - 如果您使用 VichUploaderBundle 进行上传,您必须指定具有 @Vich\UploadableField 注解的字段链接
  • virtualField - 默认情况下,序列化程序将用链接到过滤图像的链接覆盖字段值。如果您添加 virtualField 选项,序列化程序将向序列化对象添加一个新字段,其名称由您在选项中提供,以及过滤图像的 URL,在这种情况下原始字段将不附加。如果您使用过滤器数组,则需要此选项。

不要忘记,为了序列化图像字段,它们也必须用 @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"
}

如果您需要在传递给 LiipImagine 之前更改 URL,例如需要交换原始名称,您可以在捆绑包配置中使用 originUrlNormalizer 选项。

bukashk0zzz_liip_imagine_serialization:
    originUrlNormalizer: AppBundle\Normalizer\UrlNormalizer

如果您需要在 LiipImagine 处理之后更改 URL,例如需要交换原始域名,您可以在捆绑包配置中使用 filteredUrlNormalizer 选项。

bukashk0zzz_liip_imagine_serialization:
    filteredUrlNormalizer: AppBundle\Normalizer\UrlNormalizer

UrlNormalizer 类必须实现 UrlNormalizerInterface

<?php

namespace AppBundle\Normalizer;

use Bukashk0zzz\LiipImagineSerializationBundle\Normalizer\UrlNormalizerInterface;

/**
 * Url normalizer
 */
class UrlNormalizer implements UrlNormalizerInterface
{    
    /**
    * {@inheritdoc} 
    */
    public function normalize($url){
        return str_replace('photo.jpg', 'my_photo.jpg', $url);
    }
}

事件

有两个事件

  • bukashk0zzz_liip_imagine.event_pre_origin_normalize // 在原始 URL 规范化之前触发
  • bukashk0zzz_liip_imagine.event_pre_filtered_normalize // 在过滤 URL 规范化之前触发

示例订阅者

services:
    app.liip_imagine_serialization_subscriber:
        class: AppBundle\Subscribers\LiipImagineSerializationEventSubscriber
        tags:
            - { name: bukashk0zzz_liip_imagine_subscriber }
<?php

namespace AppBundle\Subscribers;

use Bukashk0zzz\LiipImagineSerializationBundle\Event\UrlNormalizerEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * LiipImagineSerializationEventSubscriber
 */
class LiipImagineSerializationEventSubscriber implements EventSubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            UrlNormalizerEvent::ORIGIN => [
                ['normalizeOrigin', 10],
            ],
            UrlNormalizerEvent::FILTERED => [
                ['normalizeFiltered', 10],
            ],
        ];
    }

    /**
     * @param UrlNormalizerEvent $event
     */
    public function normalizeOrigin(UrlNormalizerEvent $event)
    {
        $event->setUrl(str_replace('photo', 'newPhoto', $event->getUrl()));
    }

    /**
     * @param UrlNormalizerEvent $event
     */
    public function normalizeFiltered(UrlNormalizerEvent $event)
    {
        $event->setUrl(str_replace('example.com', 'img.example.com', $event->getUrl()));
    }
}

示例

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Bukashk0zzz\LiipImagineSerializationBundle\Annotation as Bukashk0zzz;
use Symfony\Component\HttpFoundation\File\File;

/**
 * User Entity
 *
 * @ORM\Table(name="users")
 * @ORM\Entity()
 *
 * @Vich\Uploadable
 * @Bukashk0zzz\LiipImagineSerializableClass
 */
class User
{    
    /**
     * @var string $coverUrl Cover url
     *
     * @ORM\Column(type="string", length=255)
     *
     * @JMS\Expose
     * @JMS\SerializedName("cover")
     *
     * @Bukashk0zzz\LiipImagineSerializableField("thumb_filter")
     */
    public $coverUrl; 
    
    /**
     * @var string $photoName Photo name
     *
     * @ORM\Column(type="string", length=255)
     *
     * @JMS\Expose
     * @JMS\SerializedName("photo")
     *
     * @Bukashk0zzz\LiipImagineSerializableField("thumb_filter", vichUploaderField="photoFile")
     */
    public $photoName;

    /**
     * @var File $photoFile Photo file
     *
     * @JMS\Exclude
     *
     * @Vich\UploadableField(mapping="user_photo_mapping", fileNameProperty="photoName")
     */
    public $photoFile;
}

版权 / 许可证

LICENSE