shingo-kumagai/siren-module

dev-master 2015-07-18 08:18 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:48:23 UTC


README

警告:这是一个高度实验性的东西,目前还不适合用于生产。

Scrutinizer Code Quality Build Status

BEAR.Sunday 的 Siren 支持

Siren 渲染器

它覆盖了默认渲染器,并以 Siren 格式表示您的资源。

Siren [https://github.com/kevinswiber/siren]

演示

使用此模块的演示应用程序 [https://github.com/shingo-kumagai/MyVendor.MySirenApi]

实体

类(可选)

您可以使用 @SirenClass 注解指定此可选值。

@SirenClass("order")

属性(可选)

属性是资源对象的响应体。

实体

使用 @SirenEmbedResource 注解添加子相关资源实体。

@SirenEmbedResource(rel="customer", src="app://self/customer?customerId={customerId}")

然后,您可以通过以下请求嵌入实体。

$this['customer']->addQuery(['customerId' => $customerId])->eager->request();

对于子相关链接实体,使用 @SirenEmbedLink 注解。

@SirenEmbedLink(rel="order-items", src="app://self/order/items?orderNumber={orderNumber}")

操作

可以使用 @SirenAction 注解添加操作。

@SirenAction(src="app://self/order/items?orderNumber={orderNumber}", method="post")

作为 SirenAction 定义的实际方法必须注解如下。

    /**
     * @SirenName("add-item")
     * @SirenTitle("Add Item")
     * @SirenField(name="orderNumber", type="hidden", value="{orderNumber}")
     * @SirenField(name="productCode", type="text")
     * @SirenField(name="quantity", type="number")
     *
     * @param int $customerId
     * @return $this
     */
    public function onPost($customerId)
    {
        // do something...
        return $this;
    }

名称(必需)

当您想表示 Action 时,需要使用 @SirenName 注解定义操作名称。

标题(可选)

这是可选的。您可以使用 @SirenTitle 注解指定。

字段(可选)

这将变成操作的控件。您可以使用 @SirenField 注解添加用户控件。

类型(可选)

工作进度

链接

@SirenLink(rel="previous", param="orderNumber")
@SirenLink(rel="next", param="orderNumber")

示例

响应

{
    "class": [
        "order"
    ],
    "properties": {
        "orderNumber": 42,
        "itemCount": 3,
        "status": "pending"
    },
    "entities": [
        {
            "href": "/customer?customerId=pj123",
            "rel": [
                "customer"
            ],
            "class": [
                "info",
                "customer"
            ],
            "properties": {
                "customerId": "pj123",
                "name": "Peter Joseph"
            }
        },
        {
            "href": "/orderitems?orderNumber=42",
            "rel": [
                "order-items"
            ],
            "class": [
                "items",
                "collection"
            ]
        }
    ],
    "actions": [
        {
            "name": "add-item",
            "href": "/orderitems?orderNumber=42",
            "method": "POST",
            "title": "Add Item",
            "type": "application/x-www-form-urlencoded",
            "fields": [
                {
                    "name": "orderNumber",
                    "type": "hidden",
                    "value": "42"
                },
                {
                    "name": "productCode",
                    "type": "text"
                },
                {
                    "name": "quantity",
                    "type": "number"
                }
            ]
        }
    ],
    "links": [
        {
            "rel": [
                "self"
            ],
            "href": "/orders?orderNumber=42"
        },
        {
            "rel": [
                "previous"
            ],
            "href": "/orders?orderNumber=41"
        },
        {
            "rel": [
                "next"
            ],
            "href": "/orders?orderNumber=43"
        }
    ]
}