Qiang Xue
11 years ago
5 changed files with 137 additions and 4 deletions
@ -0,0 +1,83 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\web; |
||||
|
||||
use yii\base\Arrayable; |
||||
use yii\base\Object; |
||||
|
||||
/** |
||||
* Link represents a link object as defined in [JSON Hypermedia API Language](https://tools.ietf.org/html/draft-kelly-json-hal-03). |
||||
* |
||||
* @author Qiang Xue <qiang.xue@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class Link extends Object implements Arrayable |
||||
{ |
||||
/** |
||||
* The self link. |
||||
*/ |
||||
const REL_SELF = 'self'; |
||||
|
||||
/** |
||||
* @var string a URI [RFC3986](https://tools.ietf.org/html/rfc3986) or |
||||
* URI template [RFC6570](https://tools.ietf.org/html/rfc6570). This property is required. |
||||
*/ |
||||
public $href; |
||||
/** |
||||
* @var string a secondary key for selecting Link Objects which share the same relation type |
||||
*/ |
||||
public $name; |
||||
/** |
||||
* @var string a hint to indicate the media type expected when dereferencing the target resource |
||||
*/ |
||||
public $type; |
||||
/** |
||||
* @var boolean a value indicating whether [[href]] refers to a URI or URI template. |
||||
*/ |
||||
public $templated = false; |
||||
/** |
||||
* @var string a URI that hints about the profile of the target resource. |
||||
*/ |
||||
public $profile; |
||||
/** |
||||
* @var string a label describing the link |
||||
*/ |
||||
public $title; |
||||
/** |
||||
* @var string the language of the target resource |
||||
*/ |
||||
public $hreflang; |
||||
|
||||
/** |
||||
* @inheritdoc |
||||
*/ |
||||
public function toArray() |
||||
{ |
||||
return array_filter((array)$this); |
||||
} |
||||
|
||||
/** |
||||
* Serializes a list of links into proper array format. |
||||
* @param array $links the links to be serialized |
||||
* @return array the proper array representation of the links. |
||||
*/ |
||||
public static function serialize(array $links) |
||||
{ |
||||
foreach ($links as $rel => $link) { |
||||
if (is_array($link)) { |
||||
foreach ($link as $i => $l) { |
||||
$link[$i] = $l instanceof self ? $l->toArray() : ['href' => $l]; |
||||
} |
||||
$links[$rel] = $link; |
||||
} elseif (!$link instanceof self) { |
||||
$links[$rel] = ['href' => $link]; |
||||
} |
||||
} |
||||
return $links; |
||||
} |
||||
} |
@ -0,0 +1,42 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\web; |
||||
|
||||
/** |
||||
* Linkable is the interface that should be implemented by classes that typically represent locatable resources. |
||||
* |
||||
* @author Qiang Xue <qiang.xue@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
interface Linkable |
||||
{ |
||||
/** |
||||
* Returns a list of links. |
||||
* |
||||
* Each link is either a URI or a [[Link]] object. The return value of this method should |
||||
* be an array whose keys are the relation names and values the corresponding links. |
||||
* |
||||
* If a relation name corresponds to multiple links, use an array to represent them. |
||||
* |
||||
* For example, |
||||
* |
||||
* ```php |
||||
* [ |
||||
* 'self' => 'http://example.com/users/1', |
||||
* 'friends' => [ |
||||
* 'http://example.com/users/2', |
||||
* 'http://example.com/users/3', |
||||
* ], |
||||
* 'manager' => $managerLink, // $managerLink is a Link object |
||||
* ] |
||||
* ``` |
||||
* |
||||
* @return array the links |
||||
*/ |
||||
public function getLinks(); |
||||
} |
Loading…
Reference in new issue