shingo-kumagai / siren-module
dev-master
2015-07-18 08:18 UTC
Requires
- php: >=5.5.0
- bear/resource: ~1.0
- bear/sunday: ~1.0
- danielgsims/php-siren: ~0.9
This package is not auto-updated.
Last update: 2024-09-14 17:48:23 UTC
README
警告:这是一个高度实验性的东西,目前还不适合用于生产。
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" } ] }