2017 © Pedro Peláez
 

library hal

application/hal builder / formatter for PHP 5.3+

image

nocarrier/hal

application/hal builder / formatter for PHP 5.3+

  • Wednesday, December 6, 2017
  • by blongden
  • Repository
  • 11 Watchers
  • 191 Stars
  • 458,388 Installations
  • PHP
  • 25 Dependents
  • 1 Suggesters
  • 37 Forks
  • 5 Open issues
  • 13 Versions
  • 4 % Grown

The README.md

Nocarrier\Hal

Build Status Scrutinizer Code Quality, (*1)

This is a library for creating documents in the [application/hal+json and application/hal+xml][1] hypermedia formats, (*2)

It requires PHP 5.4 or later., (*3)

addLink('next', '/orders?page=2');
$hal->addLink('search', '/orders?id={order_id}');

$resource = new Hal(
    '/orders/123',
    array(
        'total' => 30.00,
        'currency' => 'USD',
    )
);

$resource->addLink('customer', '/customer/bob', array('title' => 'Bob Jones '));
$hal->addResource('order', $resource);
echo $hal->asJson();
echo $hal->asXml();
```

## Installation

The preferred method of installation is via packagist as this provides the PSR-0 autoloader functionality. The
following command will download and install the latest version of the Hal library into your project.

```
php composer.phar require nocarrier/hal
```

Alternatively, clone the project and install into your project manually.

## License

Nocarrier\Hal is licensed under the MIT license.

[1]: http://tools.ietf.org/html/draft-kelly-json-hal-05

## Usage

### Creating Hal Resources

A Hal resource can be created with no values set:

```php
$hal = new \Nocarrier\Hal();
```
with a URI for the resource:

```php
$hal = new \Nocarrier\Hal('/orders');
```

and also with an array of data:

```php
$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);
```

Hal resources can also be created from existing XML or JSON documents:

```php
$hal = \Nocarrier\Hal::fromJson($jsonString);
```

```php
$hal = \Nocarrier\Hal::fromXml($xmlString);
```

```php
$hal = \Nocarrier\Hal::fromXml($simpleXMLElement);
```

The depth of embedded resources parsed with both these methods is controlled by
a second argument, which defaults to 0:

```php
$hal = \Nocarrier\Hal::fromJson($jsonString, 5);
```

### Getting Representations

The Hal resource can be formatted as JSON or XML:

```php
$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);
$hal->asJson();
```

which with a first argument of `true` for pretty printing:

```php
$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);
$hal->asJson(true);
```

gives:

```json
{
    "customerId": "CUS1234",
    "_links": {
        "self": {"href": "/orders"}
    }
}
```

and

```php
$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);
$hal->asXml(true);
```

gives:

```xml

<resource href="/orders">
    <customerId>CUS1234</customerId>
</resource>

Data

The data can be set through setData and read with getData:, (*4)

$hal = new \Nocarrier\Hal('/orders');
$hal->setData(['customerId' => 'CUS1234']);
$hal->getData();

Using array keys in the data for the XML representation can be done by prefixing the key with @:, (*5)

$hal = new \Nocarrier\Hal('/orders');
$hal->setData(['customerId' => ['CUS1234', '@type' => 'legacy']]);

gives:, (*6)

<?xml version="1.0"?>
<resource href="/orders">
    <customerId value="CUS1234" type="legacy"/>
</resource>

The @ is ignored if JSON is rendered:, (*7)

{
    "customerId": {
        "value": "CUS1234",
        "type":" legacy"
    },
    "_links": {
        "self": {"href": "/orders"}
    }
}

Links can be added to the resource by providing the rel identifying them and a URI:, (*8)

$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);
$hal->addLink('next', '/orders?page=2');
$hal->addLink('search', '/orders?id={order_id}');

gives:, (*9)

{
    "customerId": "CUS1234",
    "_links": {
        "self": {
            "href": "/orders"
        },
        "next": {
            "href": "/orders?page=2"
        },
        "search": {
            "href": "/orders?id={order_id}"
        }
    }
}

If a Hal object has been created from a response returned from elsewhere it can be helpful to retrieve the links from it., (*10)

$json = '{
     "customerId": "CUS1234",
     "_links": {
         "self": {
             "href": "/orders"
         },
         "next": {
             "href": "/orders?page=2"
         },
         "search": {
             "href": "/orders?id={order_id}"
         }
     }
 }';

$hal = \Nocarrier\Hal::fromJson($json);

foreach($hal->getLinks() as $rel => $links) {
    echo $rel."\n";
    foreach($links as $link) {
        echo (string) $link."\n";
    }
}
next
/orders?page=2
search
/orders?id={order_id}

and, (*11)

$json = '{
     "customerId": "CUS1234",
     "_links": {
         "self": {
             "href": "/orders"
         },
         "next": {
             "href": "/orders?page=2"
         },
         "search": {
             "href": "/orders?id={order_id}"
         }
     }
 }';
$hal = \Nocarrier\Hal::fromJson($json);
foreach($hal->getLink('next') as $link) {
    echo (string) $link."\n";
}

outputs:, (*12)

/orders?page=2

Embedded Resources

As well as linking to resources so that the client can fetch them they can be directly embedded in the resource., (*13)

$hal = new \Nocarrier\Hal('/orders', ['customerId' => 'CUS1234']);

$resource = new \Nocarrier\Hal(
    '/orders/123',
    array(
        'total' => 30.00,
        'currency' => 'USD',
    )
);

$resource->addLink('customer', '/customer/bob', array('title' => 'Bob Jones <bob@jones.com>'));
$hal->addResource('order', $resource);

outputs:, (*14)

{
    "customerId": "CUS1234",
    "_links": {
        "self": {
            "href": "/orders"
        }
    },
    "_embedded": {
        "order": [
            {
                "total": 30,
                "currency": "USD",
                "_links": {
                    "self": {
                        "href": "/orders/123"
                    },
                    "customer": {
                        "href": "/customer/bob",
                        "title": "Bob Jones <bob@jones.com>"
                    }
                }
            }
        ]
    }
}

The Versions

06/12 2017

dev-master

9999999-dev https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

 

The Development Requires

json xml rest hal hypermedia

07/09 2015

0.9.12

0.9.12.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

01/07 2015

0.9.11

0.9.11.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

24/11 2014

0.9.10

0.9.10.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

09/09 2014

0.9.9

0.9.9.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

13/06 2014

0.9.7

0.9.7.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

06/05 2014

0.9.6

0.9.6.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

json xml rest hal hypermedia

25/03 2013

0.9.2

0.9.2.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

json xml rest hal hypermedia

20/03 2013

0.9.1

0.9.1.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

json xml rest hal hypermedia

24/01 2013

0.9.0

0.9.0.0 https://github.com/blongden/hal

application/hal builder / formatter for PHP 5.3+

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

json xml rest hal hypermedia