--- /dev/null
+<?php
+
+namespace Controllers;
+
+use Controllers\IDivineController;
+use Services\Http\HttpRequest;
+use Exception;
+
+abstract class AbstractBaseController
+{
+ protected $_jsonResponse;
+
+ //TODO: Not really used as this application probably won't have views.
+ //But hey, the intended usage is when you want a controller to not render
+ //a view. So it's there if I ever use this for anything else.
+ public function setJsonResponse($bool) {
+ if(!is_bool($bool)) {
+ throw new Exception('Not a boolean value.');
+ }
+
+ $this->_jasonResponse = $bool;
+ }
+}
interface IDivineController
{
- public function setJsonResponse();
+ public function setJsonResponse($bool);
public function getAction();
}
namespace Controllers;
use DataAccess\StepMania\ISimfileRepository;
-use Services\IHttpResponse;
+use Services\Http\IHttpResponse;
+use Services\Http\IHttpRequest;
+use Controllers\AbstractBaseController;
-class IndexController implements IDivineController
+class IndexController extends AbstractBaseController implements IDivineController
{
private $_content;
private $_simfileRepository;
- private $_jsonResponse;
private $_response;
+ private $_request;
//override
public function __construct(
+ IHttpRequest $request,
IHttpResponse $response,
ISimfileRepository $repository
) {
+ $this->_request = $request;
$this->_response = $response;
$this->_simfileRepository = $repository;
}
-
- public function setJsonResponse() {
- $this->_jsonResponse = true;
- }
public function getAction() {
/* @var $simfile Domain\Entities\StepMania\ISimfile */
- $simfile = $this->_simfileRepository->find(1);
- $modes = array();
- /* @var $steps Domain\VOs\StepMania\IStepChart */
- foreach ($simfile->getSteps() as $steps) {
- $modes[] = $steps->getArtist()->getTag();
- }
+// public function getMethod();
+// public function isGet();
+// public function isPost();
+// public function isPut();
+// public function isDelete();
+// public function isHead();
+// public function isFormData();
+// public function get();
+// public function put();
+// public function post();
+// public function delete();
+// public function cookies();
+// public function getBody();
+// public function getContentType();
+// public function getHost();
+// public function getIp();
+// public function getReferrer();
+// public function getReferer();
+// public function getUserAgent();
+ $r = $this->_request;
+// echo $r->getMethod();
$this->_response->setHeader('Content-Type', 'application/json')
- ->setBody(json_encode($modes))
+ ->setBody(json_encode(array('body' => $r->getBody())))
->sendResponse();
}
}
$options = array(PDO::ATTR_EMULATE_PREPARES => false,\r
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);\r
\r
- $this->_db = new PDO($dsn, $username, $password, $options); \r
+ $this->_db = new PDO($dsn, $username, null, $options); \r
$this->_maps = include $maps;\r
}\r
\r
+++ /dev/null
-<?php\r
-/**\r
- * @package DIExample\r
- * @copyright 2013 Internet Brands, Inc. All Rights Reserved.\r
- */\r
-namespace Domain\Entities;\r
-\r
-/**\r
- * Bar\r
- *\r
- * @author Michael Funk <mfunk@internetbrands.com>\r
- */\r
-class Bar implements BarInterface\r
-{\r
-\r
- /**\r
- * just returns a hardcoded string\r
- *\r
- * @return string\r
- */\r
- public function returnMe()\r
- {\r
- return 'This is from the bar class';\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-<?php\r
-/**\r
- * @package DIExample\r
- * @copyright 2013 Internet Brands, Inc. All Rights Reserved.\r
- */\r
-namespace Domain\Entities;\r
-\r
-/**\r
- * BarInterface\r
- *\r
- * @author Michael Funk <mfunk@internetbrands.com>\r
- */\r
-interface BarInterface\r
-{\r
-\r
- /**\r
- * returnMe\r
- *\r
- * @return string\r
- */\r
- public function returnMe();\r
-}
\ No newline at end of file
+++ /dev/null
-<?php\r
-/**\r
- * @package DIExample\r
- * @copyright 2013 Internet Brands, Inc. All Rights Reserved.\r
- */\r
-namespace Domain\Entities;\r
-\r
-/**\r
- * Foo\r
- *\r
- * @author Michael Funk <mfunk@internetbrands.com>\r
- */\r
-class Foo\r
-{\r
-\r
- /**\r
- * This just holds the injected instance of Bar\r
- * @var MikeFunk\Test\Bar\r
- */\r
- protected $bar;\r
-\r
- /**\r
- * inject Bar into $bar and then $this->bar with type hinting. The Bar\r
- * class is bound to the BarInterface in config/di.yml\r
- *\r
- * @return void\r
- */\r
- public function __construct(BarInterface $bar)\r
- {\r
- $this->bar = $bar;\r
- }\r
-\r
- /**\r
- * Just return the string from Bar::returnMe()\r
- *\r
- * @return string\r
- */\r
- public function returnMe()\r
- {\r
- return $this->bar->returnMe();\r
- }\r
-}
\ No newline at end of file
--- /dev/null
+<?php
+
+namespace Services\Http;
+
+use Services\Http\IHttpRequest;
+use Services\Http\Util;
+
+class HttpRequest implements IHttpRequest
+{
+ const METHOD_GET = 'GET';
+ const METHOD_POST = 'POST';
+ const METHOD_PUT = 'PUT';
+ const METHOD_DELETE = 'DELETE';
+ const METHOD_HEAD = 'HEAD';
+
+ protected $_method;
+ protected $_cookies;
+ protected $_formDataMediaTypes = array('application/x-www-form-urlencoded');
+
+ public function __construct()
+ {
+ $this->_method = $_SERVER['REQUEST_METHOD'];
+
+ if(isset($_SERVER['HTTP_COOKIE'])) {
+ $this->_cookies = Util::parseCookieHeader($_SERVER['HTTP_COOKIE']);
+ }
+ }
+
+ public function getMethod()
+ {
+ return $this->_method;
+ }
+
+ public function isGet()
+ {
+ return $this->_method == self::METHOD_GET;
+ }
+
+ public function isPost()
+ {
+ return $this->_method == self::METHOD_POST;
+ }
+
+ public function isPut()
+ {
+ return $this->_method == self::METHOD_PUT;
+ }
+
+ public function isHead()
+ {
+ return $this->_method == self::METHOD_HEAD;
+ }
+
+ public function isDelete()
+ {
+ return $this->_method == self::METHOD_DELETE;
+ }
+
+ public function getContentType()
+ {
+ return isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : null;
+ }
+
+ public function isFormData()
+ {
+ return in_array($this->getContentType(), $this->_formDataMediaTypes);
+ }
+
+ public function get()
+ {
+ return !empty($_GET) ? $_GET : null;
+ }
+
+ public function getGetElement($key)
+ {
+ return isset($_GET[$key]) ? $_GET[$key] : null;
+ }
+
+ public function post()
+ {
+ return !empty($_POST) ? $_POST : null;
+ }
+
+ public function getPostElement($key)
+ {
+ return isset($_POST[$key]) ? $_POST[$key] : null;
+ }
+
+ public function put()
+ {
+ return $this->post();
+ }
+
+ public function getPutElement($key)
+ {
+ return $this->getPostElement($key);
+ }
+
+ public function delete()
+ {
+ return $this->post();
+ }
+
+ public function getDeleteElement($key)
+ {
+ return $this->getPostElement($key);
+ }
+
+ public function cookies()
+ {
+ return $this->_cookies;
+ }
+
+ public function getCookie($key)
+ {
+ return isset($this->_cookies[$key]) ? $this->_cookies[$key] : null;
+ }
+
+ public function getBody()
+ {
+ return @file_get_contents('php://input');
+ }
+ public function getHost()
+ {
+ if(isset($_SERVER['HTTP_HOST'])) {
+ $parts = explode(':', $_SERVER['HTTP_HOST']);
+ return $parts[0];
+ }
+
+ return $_SERVER['SERVER_NAME'];
+ }
+
+ public function getIp()
+ {
+ $keys = array('X_FORWARDED_FOR', 'HTTP_X_FORWARDED_FOR', 'CLIENT_IP', 'REMOTE_ADDR');
+ foreach ($keys as $key) {
+ if(isset($_SERVER[$key])) {
+ return $_SERVER[$key];
+ }
+ }
+ }
+
+ public function getReferrer()
+ {
+ return $_SERVER['HTTP_REFERER'];
+ }
+
+ // some people like to spell it referer due to RFC 1945
+ public function getReferer()
+ {
+ return $this->getReferer();
+ }
+
+ public function getUserAgent()
+ {
+ return $_SERVER['HTTP_USER_AGENT'];
+ }
+}
\ No newline at end of file
<?php
-namespace Services;
+namespace Services\Http;
-use Services\IHttpResponse;
+use Services\Http\IHttpResponse;
use Exception;
class HttpResponse implements IHttpResponse
--- /dev/null
+<?php
+
+namespace Services\Http;
+
+interface IHttpRequest
+{
+ public function getMethod();
+ public function isGet();
+ public function isPost();
+ public function isPut();
+ public function isDelete();
+ public function isHead();
+ public function isFormData();
+ public function get();
+ public function put();
+ public function post();
+ public function delete();
+ public function cookies();
+ public function getBody();
+ public function getContentType();
+ public function getHost();
+ public function getIp();
+ public function getReferrer();
+ public function getReferer();
+ public function getUserAgent();
+}
\ No newline at end of file
<?php
-namespace Services;
+namespace Services\Http;
interface IHttpResponse
{
--- /dev/null
+<?php
+
+namespace Services\Http;
+
+class Util
+{
+ public static function parseCookieHeader($header)
+ {
+ $cookies = array();
+ $header = rtrim($header, "\r\n");
+ $headerPieces = preg_split('@\s*[;,]\s*@', $header);
+ foreach ($headerPieces as $c) {
+ $cParts = explode('=', $c, 2);
+ if (count($cParts) === 2) {
+ $key = urldecode($cParts[0]);
+ $value = urldecode($cParts[1]);
+ if (!isset($cookies[$key])) {
+ $cookies[$key] = $value;
+ }
+ }
+ }
+
+ return $cookies;
+ }
+}
'datamapper.maps' => '../config/DataMaps.php',\r
\r
'Domain\Entities\StepMania\ISimfile' => DI\object('Domain\Entities\StepMania\Simfile'),\r
- 'Services\IHttpResponse' => DI\object('Services\HttpResponse'),\r
+ 'Services\Http\IHttpResponse' => DI\object('Services\Http\HttpResponse'),\r
+ 'Services\Http\IHttpRequest' => DI\object('Services\Http\HttpRequest'),\r
'DataAccess\StepMania\ISimfileRepository' => DI\object('DataAccess\StepMania\SimfileRepository'),\r
'DataAccess\DataMapper\IDataMapper' => DI\object('DataAccess\DataMapper\DataMapper')\r
->constructor(DI\link('datamapper.maps')), \r