1. Go to this page and download the library: Download willdurand/hateoas library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
willdurand / hateoas example snippets
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Serializer\XmlRoot("user")
*
* @Hateoas\Relation("self", href = "expr('/api/users/' ~ object.getId())")
*/
class User
{
/** @Serializer\XmlAttribute */
private $id;
private $firstName;
private $lastName;
public function getId() {}
}
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
#[Serializer\XmlRoot('user')]
#[Hateoas\Relation('self', href: "expr('/api/users/' ~ object.getId())")]
class User
{
#[Serializer\XmlAttribute]
private $id;
private $firstName;
private $lastName;
public function getId() {}
}
use Hateoas\HateoasBuilder;
$hateoas = HateoasBuilder::create()->build();
$user = new User(42, 'Adrien', 'Brault');
$json = $hateoas->serialize($user, 'json');
$xml = $hateoas->serialize($user, 'xml');
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
/**
* ...
*
* @Hateoas\Relation(
* "manager",
* href = "expr('/api/users/' ~ object.getManager().getId())",
* embedded = "expr(object.getManager())",
* exclusion = @Hateoas\Exclusion(excludeIf = "expr(object.getManager() === null)")
* )
*/
class User
{
...
/** @Serializer\Exclude */
private $manager;
}
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation(
'manager',
href: "expr('/api/users/' ~ object.getManager().getId())",
embedded: "expr(object.getManager())",
exclusion: new Hateoas\Exclusion(excludeif: "expr(object.getManager() === null)"),
)]
class User
{
...
#[Serializer\Exclude]
private $manager;
}
use Hateoas\Representation\PaginatedRepresentation;
use Hateoas\Representation\CollectionRepresentation;
$paginatedCollection = new PaginatedRepresentation(
new CollectionRepresentation(array($user1, $user2, ...)),
'user_list', // route
array(), // route parameters
1, // page number
20, // limit
4, // total pages
'page', // page route parameter name, optional, defaults to 'page'
'limit', // limit route parameter name, optional, defaults to 'limit'
false, // generate relative URIs, optional, defaults to `false`
75 // total collection size, optional, defaults to `null`
);
$json = $hateoas->serialize($paginatedCollection, 'json');
$xml = $hateoas->serialize($paginatedCollection, 'xml');
use Hateoas\Configuration\Route;
use Hateoas\Representation\Factory\PagerfantaFactory;
$pagerfantaFactory = new PagerfantaFactory(); // you can pass the page,
// and limit parameters name
$paginatedCollection = $pagerfantaFactory->createRepresentation(
$pager,
new Route('user_list', array())
);
$json = $hateoas->serialize($paginatedCollection, 'json');
$xml = $hateoas->serialize($paginatedCollection, 'xml');
use Hateoas\Representation\Factory\PagerfantaFactory;
$pagerfantaFactory = new PagerfantaFactory(); // you can pass the page and limit parameters name
$paginatedCollection = $pagerfantaFactory->createRepresentation(
$pager,
new Route('user_list', array()),
new CollectionRepresentation($pager->getCurrentPageResults())
);
$json = $hateoas->serialize($paginatedCollection, 'json');
$xml = $hateoas->serialize($paginatedCollection, 'xml');
use JMS\Serializer\Annotation as Serializer;
/**
* @Serializer\XmlRoot("users")
*/
class UsersRepresentation
{
/**
* @Serializer\Inline
*/
private $inline;
public function __construct($inline)
{
$this->inline = $inline;
}
}
$paginatedCollection = ...;
$paginatedCollection = new UsersRepresentation($paginatedCollection);
use JMS\Serializer\Annotation as Serializer;
#[Serializer\XmlRoot('users')]
class UsersRepresentation
{
#[Serializer\Inline]
private $inline;
public function __construct($inline)
{
$this->inline = $inline;
}
}
$paginatedCollection = ...;
$paginatedCollection = new UsersRepresentation($paginatedCollection);
$error = new VndErrorRepresentation(
'Validation failed',
42,
'http://.../',
'http://.../'
);
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Hateoas\Relation("self", href = "expr('/api/users/' ~ object.getId())")
*/
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation('self', href: "expr('/api/users/' ~ object.getId())")]
use Hateoas\HateoasBuilder;
$hateoas = HateoasBuilder::create()
->setExpressionContextVariable('foo', new Foo())
->build();
use Hateoas\UrlGenerator\CallableUrlGenerator;
$hateoas = HateoasBuilder::create()
->setUrlGenerator(
null, // By default all links uses the generator configured with the null name
new CallableUrlGenerator(function ($route, array $parameters, $absolute) use ($myFramework) {
return $myFramework->generateTheUrl($route, $parameters, $absolute);
})
)
->build()
;
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Hateoas\Relation(
* "self",
* href = @Hateoas\Route(
* "user_get",
* parameters = {
* "id" = "expr(object.getId())"
* }
* )
* )
*/
class User
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation(
'self',
href: new Hateoas\Route(
'user_get',
parameters: [
'id' => 'expr(object.getId())',
],
)
)]
class User
use Hateoas\UrlGenerator\SymfonyUrlGenerator;
$hateoas = HateoasBuilder::create()
->setUrlGenerator(null, new SymfonyUrlGenerator($app['url_generator']))
->build()
;
use Hateoas\Configuration\Metadata\ConfigurationExtensionInterface;
use Hateoas\Configuration\Metadata\ClassMetadataInterface;
use Hateoas\Configuration\Relation;
class AcmeFooConfigurationExtension implements ConfigurationExtensionInterface
{
/**
* {@inheritDoc}
*/
public function decorate(ClassMetadataInterface $classMetadata): void
{
if (0 === strpos('Acme\Foo\Model', $classMetadata->getName())) {
// Add a "root" relation to all classes in the `Acme\Foo\Model` namespace
$classMetadata->addRelation(
new Relation(
'root',
'/'
)
);
}
}
}
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation(
name: 'self',
href: new Hateoas\Route(
'user_get',
parameters: ['id' = 'expr(object.getId())'],
absolute: true,
generator: 'my_custom_generator',
),
)]
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Hateoas\Relation(
* name = "friends",
* embedded = @Hateoas\Embedded(
* "expr(object.getFriends())",
* exclusion = ...,
* xmlElementName = "users"
* )
* )
*/
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation(
name: 'friends',
embedded: new Hateoas\Embedded(
'expr(object.getFriends())',
exclusion: '...',
xmlElementName: 'users',
),
)]
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Hateoas\Relation(
* "manager",
* href = @Hateoas\Route(
* "user_get",
* parameters = { "id" = "expr(object.getManager().getId())" }
* ),
* exclusion = @Hateoas\Exclusion(excludeIf = "expr(null === object.getManager())")
* )
*/
class User
{
public function getId() {}
/**
* @return User|null
*/
public function getManager() {}
}
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\Relation(
name: 'manager',
href: new Hateoas\Route(
'user_get',
parameters: ['id' => 'expr(object.getManager().getId())'],
),
exclusion: new Hateoas\Exclusion(excludeIf: 'expr(null === object.getManager())')
)]
class User
{
public function getId() {}
public function getManager(): ?User {}
}
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Hateoas\RelationProvider("expr(service('user.rel_provider').getExtraRelations())")
*/
class User
{
...
}
use Hateoas\Configuration\Annotation as Hateoas;
#[Hateoas\RelationProvider("expr(service('user.rel_provider').getExtraRelations())")]
class User
{
...
}
use Hateoas\Configuration\Relation;
use Hateoas\Configuration\Route;
class UserRelPrvider
{
private $evaluator;
public function __construct(CompilableExpressionEvaluatorInterface $evaluator)
{
$this->evaluator = $evaluator;
}
/**
* @return Relation[]
*/
public function getExtraRelations(): array
{
// You need to return the relations
return array(
new Relation(
'self',
new Route(
'foo_get',
['id' => $this->evaluator->parse('object.getId()', ['object'])]
)
)
);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.