Ejemplo n.º 1
0
 static function entity(\PDO $db, $id)
 {
     return Resource::create(self::defaults())->allowedMethods(['GET', 'PUT', 'DELETE'])->isProcessable(self::validator())->canPutToMissing(false)->isNew(false)->isRespondWithEntity(function (Context $context) {
         return $context->getRequest()->isMethod('PUT');
     })->exists(function ($context) use($db, $id) {
         return Todo::exists($db, $id);
     })->put(function ($context) use($db, $id) {
         Todo::update($db, $id, $context->entity);
     })->delete(function ($context) use($db, $id) {
         Todo::delete($db, $id);
     })->handleOk(function (Context $context) use($db, $id) {
         return Todo::fetchOne($db, $id);
     });
 }
Ejemplo n.º 2
0
 function testTypicalCollectionResource()
 {
     $entities = [];
     $resource = Resource::create()->allowedMethods(['GET', 'POST'])->availableMediaTypes(['application/json'])->isMalformed([self::class, 'validateJson'])->isProcessable(function (Context $context) {
         return $context->getRequest()->isMethod('GET') || isset($context->entity->title);
     })->post(function (Context $context) use(&$entities) {
         $entity = (array) $context->entity;
         $entity['id'] = count($entities) + 1;
         $entities[] = $entity;
         $context->newEntity = $entity;
     })->handleOk(function (Context $context) use(&$entities) {
         return $entities;
     })->handleCreated(function (Context $context) {
         return $context->newEntity;
     });
     $this->assertEquals('[]', $this->GET($resource)->getContent());
     $this->assertStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY, $this->POST($resource, json_encode([])));
     $response = $this->POST($resource, json_encode(['title' => 'testing post']));
     $this->assertStatusCode(Response::HTTP_CREATED, $response);
     $this->assertEquals(['id' => 1, 'title' => 'testing post'], (array) json_decode($response->getContent()));
     $this->assertStatusCode(Response::HTTP_CREATED, $this->POST($resource, json_encode(['title' => 'lorem ipsum'])));
     $this->assertEquals([(object) ['id' => 1, 'title' => 'testing post'], (object) ['id' => 2, 'title' => 'lorem ipsum']], json_decode($this->GET($resource)->getContent()));
 }
Ejemplo n.º 3
0
 function __construct(Request $request, Resource $resource)
 {
     $this->request = $request;
     $this->resource = $resource->copy();
 }
Ejemplo n.º 4
0
<?php

require_once 'vendor/autoload.php';
use RestMachine\Resource;
use RestMachine\Context;
use RestMachine\WebMachine;
$defaults = Resource::create()->availableMediaTypes(['application/json', 'application/php']);
$resource = Resource::create($defaults)->allowedMethods(['GET', 'POST'])->lastModified(new \DateTime('2015-06-28', new \DateTimeZone('Europe/Vienna')))->etag('aXs3f')->isMalformed(function (Context $context) {
    if ($context->getRequest()->getContent()) {
        json_decode($context->getRequest()->getContent());
        return json_last_error();
    }
    return false;
})->handleOk(function (Context $context) {
    return ['hi there'];
})->post(function (Context $context) {
    $context->newEntity = ['foo'];
})->handleCreated(function (Context $context) {
    return $context->newEntity;
});
$request = PHP_SAPI != 'cli' ? \Symfony\Component\HttpFoundation\Request::createFromGlobals() : \Symfony\Component\HttpFoundation\Request::create('http://example.com/foo');
$webMachine = new WebMachine();
//$webMachine->enableTrace();
$response = $webMachine->run($resource, $request);
if (PHP_SAPI != 'cli') {
    $response->send();
} else {
    echo $response, PHP_EOL;
}