jms/serializer-service-provider

Silex 序列化组件服务提供者

0.1.1 2012-10-08 16:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:04:53 UTC


README

SerializerServiceProvider 为对象序列化提供服务。此服务提供者使用 JMS\SerializerBundle 进行序列化。

Build Status

参数

  • serializer.src_directory: 存放 JMS\SerializerBundle 源代码的目录。

  • serializer.cache.directory: 存储元数据缓存的目录。

  • serializer.naming_strategy.seperator (可选): 正规化属性时使用的分隔符字符串。

  • serializer.naming_strategy.lower_case (可选): 布尔标志,表示属性是否应该正规化为小写字符串。

  • serializer.date_time_handler.format (可选): 序列化和反序列化 DateTime 对象时使用的格式。请参阅 PHP 文档中支持的日期/时间格式

  • serializer.date_time_handler.default_timezone (可选): 序列化和反序列化 DateTime 对象时使用的时区。请参阅 PHP 文档中支持的时区列表

  • serializer.disable_external_entities (可选): 布尔标志,表示序列化器是否应禁用 XML 序列化格式的外部实体。

服务

  • serializer: JMS\SerializerBundle\Serializer\Serializer 实例。

注册

<?php

$app = new Silex\Application();

$app->register(new JMS\SerializerServiceProvider\SerializerServiceProvider(), array(
    'serializer.src_directory' => 'path/to/vendor/jms/serializer-bundle/src',
    'serializer.cache.directory' => 'path/to/cache'
));

使用

标注您希望序列化的类,请参阅 注释文档

<?php

use JMS\SerializerBundle\Annotation;

// The serializer bundle doesn't need getters or setters
class Page
{
    /**
     * @Type("integer")
     */
    private $id;

    /**
     * @Type("string")
     */
    private $title;

    /**
     * @Type("string")
     */
    private $body;

    /**
     * @Type("DateTime")
     */
    private $created;

    /**
     * @Type("Author")
     */
    private $author;

    /**
     * @Type("boolean")
     */
    private $featured;
}
<?php
use JMS\SerializerBundle\Annotation;

// The serializer bundle doesn't need getters or setters
class Author
{
    /**
     * @Type("string")
     */
    private $name;
}

SerializerServiceProvider 提供者提供了一个 serializer 服务。在您的应用程序中使用它来序列化和反序列化您的对象

<?php

use Silex\Application;
use JMS\SerializerServiceProvider\SerializerServiceProvider;
use Symfony\Component\HttpFoundation\Response;

$app = new Application();

// Make sure that the PHP script can write in the cache directory and that
// the directory exists.
$app->register(new SerializerServiceProvider(), array(
    'serializer.src_directory' => __DIR__."/../vendor/jms/serializer-bundle/src",
    'serializer.cache.directory' => __DIR__."/../cache/serializer"
));

// only accept content types supported by the serializer via the assert method.
$app->get("/pages/{id}.{_format}", function ($id) use ($app) {
    // assume a page_repository service exists that returns Page objects.
    $page = $app['page_repository']->find($id);
    $format = $app['request']->getFormat();

    if (!$page instanceof Page) {
        $this->abort("No page found for id: $id");
    }

    return new Response($app['serializer']->serialize($page, $format), 200, array(
        "Content-Type" => $app['request']->getMimeType($format)
    ));
})->assert("_format", "xml|json")
    ->assert("id", "\d+");

许可

此服务提供者可在 MIT 许可证 下使用。请注意,所需的 JMSSerializerBundleApache 2 许可证 下提供。

鸣谢

感谢 Johannes Schmitt (@schmittjoh) 为制作 JMSSerializerBundle