Skip to content

Instantly share code, notes, and snippets.

@brianium
Created January 13, 2014 21:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brianium/8408227 to your computer and use it in GitHub Desktop.
Save brianium/8408227 to your computer and use it in GitHub Desktop.
Swamp of POX with Silex
<?php
$app = new \Silex\Application();
$doOrder = function(\SimpleXMLElement $order) {
$orderService = new OrderService();
$orderService->setBeerId((string) $order['beer_id']);
$creditCard = CreditCardFactory::fromXml($order->CreditCard);
$orderService->setCreditCard($creditCard);
$order = $orderService->createOrder();
return XmlMapper::map($order);
};
$getOrderStatus = function(\SimpleXMLElement $status) {
$statusFetcher = new StatusFetcher();
$statusFetcher->setOrderId((string) $status['order_id']);
$status = $statusFetcher->fetch();
return XmlMapper::map($status);
};
$app->post('/orderService', function(Request $request) use ($doOrder, $getOrderStatus) {
$body = simplexml_load_string($request->getContent());
$name = $body->getName();
switch ($name) {
case: 'OrderRequest':
return $doOrder($body);
case: 'OrderStatusRequest':
return $getOrderStatus($body);
default:
return ErrorHandler::handle();
}
});
@brianium
Copy link
Author

A request for placing an order might look like this:

POST /orderService HTTP/1.1

<OrderRequest beer_id="54cd34ecde3">
  <CreditCard number="4444444444444441" cvc="123" expires="10/15" />
</OrderRequest>

And its response might look like this:

<Order id="54def5cde" placed="2014-05-06:11:11:11" />

A request for checking the status of an order might look like this:

POST /orderService HTTP/1.1

<OrderStatusRequest order_id="54def5cde" />

With a response that might look like this:

<OrderStatus status="pending" />

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment