Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Flexible implementation of the Ruby on Rails ActiveResource REST client for PHP
branch: connectedness

This branch is 1 commit ahead, 5 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
ActiveResourceBase.php
AuthenticatedActiveResourceBase.php
ConnectednessActiveResourceBase.php
ConnectednessTypeMarshaller.php
CurlTransporter.php
Doxyfile
JsonSerializer.php
README.markdown
TypeMarshaller.php
XmlSerializer.php

README.markdown

PHP ActiveResource

Flexible implementation of the Ruby on Rails ActiveResource REST client for PHP. Intended to work with RoR-based REST servers, which all share similar API patterns.

The implementation is decoupled with many concerns:

  • ActiveResource itself
  • Transport
  • Serialization
  • Inflection

The provided serializations are XML and JSON.

An AuthenticatedActiveResourceBase class is also provided that may be used in conjonction with authlogic_api

Legal

Copyright 2010 Pascal Hurni

Licensed under the MIT License

Usage

ActiveResource.php
<?php
require_once('ActiveResourceBase.php');
require_once('CurlTransporter.php');
require_once('XmlSerializer.php');
require_once('JsonSerializer.php');
require_once('TypeMarshaller.php');

// Setup a base class with all your chosen concerns
class ActiveResource extends ActiveResourceBase {
  static $marshaller;

  function __construct ($data = array ()) {
    // These may be set by subclasses constructor, so check them before re-setting
    if (! $this->transporter) $this->transporter = new CurlTransporter();
    if (! $this->serializer) $this->serializer = new XmlSerializer(self::$marshaller, array('element_name' => $this->element_name)));

    parent::__construct($data);
  }
}

ActiveResource::$marshaller = new TypeMarshaller(array('User' => 'Person', 'Member' => 'Person', 'Project' => 'weird_PHP_classname_for_Project'));

?>

Person.php
<?php
require_once ('ActiveResource.php');

class Person extends ActiveResource {
    var $site = 'http://localhost:3000/';
    var $element_name = 'person';
}
?>

UseCases.php
<?php
require_once ('Person.php');

// create a new person
$person = new Person( array('firstname => 'John', 'lastname => 'Doe') );
if (!$person->save()) {
  echo $person->error_message;
}

// for all other operations you must have a blank object as a handle.
$Person = new Person();

// find people
$people = $Person->find('all');
if ($people === false) { // don't use "if (!$people)" because an empty array will match!
  echo $people->error_message;
}
else {
  foreach ($people as $person) {
    var_dump($person->to_object());
  }
}

// find people with some options (passed as query string parameters)
$people = $Person->find('all', 'lastname' => 'Doe');

// find a known person
$person = $Person->find(123);
if ($person === false)
  echo $Person->error_message;   // read carefully $Person with a uppercase P
}
else {
  var_dump($person->to_object());
}

// update an attribute
// have a Person object in $person (find() it) 
$person->phone_number = '555-98-76';
if (!$person->save()) {
  echo $person->error_message;
}

// delete a person
// have a Person object in $person (find() it) 
if (!$person->destoy()) {
  echo $person->error_message;
}

// custom method
object = $Person->get('banned', array('level' => 3));
if ($object === false) {
  echo $person->error_message;
}

?>
Something went wrong with that request. Please try again.