Content-Negotiation with the help of Renderer and Formatters
This commit is contained in:
80
Lib/Formatter/Html.php
Normal file
80
Lib/Formatter/Html.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace BSR\Lib\Formatter;
|
||||
|
||||
class Html extends Formatter {
|
||||
protected static function init() {
|
||||
self::registerFormats(array(
|
||||
'application/xhtml+xml',
|
||||
'text/html',
|
||||
));
|
||||
}
|
||||
|
||||
private function result($data) {
|
||||
// the format is array('result' => array('funcname' => DATA))
|
||||
// so take the first element of the 'result' array
|
||||
$data = reset($data['result']);
|
||||
|
||||
$first = reset($data);
|
||||
$single = ! is_array($first);
|
||||
|
||||
$content = '<table><thead>';
|
||||
if($single) {
|
||||
$content .= "<tr><th>Field</th><th>Value</th></tr>";
|
||||
} else {
|
||||
$content .= '<tr>';
|
||||
foreach(array_keys($first) as $k) {
|
||||
$content .= "<th>$k</th>";
|
||||
}
|
||||
$content .= '</tr>';
|
||||
}
|
||||
$content .= '</thead><tbody>';
|
||||
if($single) {
|
||||
foreach($data as $k => $v) {
|
||||
$content .= "<tr><th>$k</th><td>".print_r($v, true)."</td></tr>";
|
||||
}
|
||||
} else {
|
||||
foreach($data as $row) {
|
||||
$content .= '<tr>';
|
||||
foreach($row as $col) {
|
||||
$content .= '<td>'.print_r($col, true).'</td>';
|
||||
}
|
||||
$content .= '</tr>';
|
||||
}
|
||||
}
|
||||
$content .= '</tbody></table>';
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
private function error($data) {
|
||||
$code = $data['error']['code'];
|
||||
$name = $data['error']['name'];
|
||||
$msg = $data['error']['reason'];
|
||||
|
||||
return '<h1>An error occured</h1>'.
|
||||
"<h2>[$code] $name</h2>".
|
||||
"<p>$msg</p>";
|
||||
}
|
||||
|
||||
private function failure($data) {
|
||||
$code = $data['failure']['code'];
|
||||
$name = $data['failure']['reason'];
|
||||
|
||||
return '<h1>A failure occured</h1>'.
|
||||
"<h2>[$code] $name</h2>";
|
||||
}
|
||||
|
||||
public function render($data)
|
||||
{
|
||||
$type = key($data);
|
||||
|
||||
if (method_exists($this, $type)) {
|
||||
$content = call_user_func_array(array($this, $type), array($data));
|
||||
} else {
|
||||
$content = '<h1>Unable to render this</h1>';
|
||||
}
|
||||
|
||||
echo $content;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user