validation and authentication.
This class is semi-abstract in that it cannot be used directly. At minimum,
- FilterRequest() needs to be overridden to select the Model to use.
+ _SelectModel() needs to be overridden to select the Model to use.
*/
-class Controller extends http\RestAction
+abstract class Controller extends http\RestAction
{
/*! @var hoplite\data\Model The object that will be operated on. */
protected $model = NULL;
/*! Selects the Model object. */
public function FilterRequest(http\Request $request, http\Response $response)
{
- // Example:
- // $this->model = new webapp\models\User();
- throw new ControllerException('Model not selected');
+ $this->model = $this->_SelectModel();
+ $this->model->SetFrom(array_merge(
+ $request->data, $request->data['_POST'], $request->data['_GET']));
}
+ /*! Returns a new instance of the Model that this object will control. */
+ abstract protected function _SelectModel();
+
/*! Gets the data from the model. */
public function DoGet(http\Request $request, http\Response $response)
{
- $this->model->SetFrom(array_merge($request->data, $request->data['_GET']));
try {
$response->data = $this->model->Fetch();
} catch (ModelException $e) {
/*! Updates an object in the store. */
public function DoPost(http\Request $request, http\Response $response)
{
- $this->model->SetFrom(array_merge($request->data, $request->data['_POST']));
try {
$this->model->Update();
$response->data = $this->model->Fetch();
/*! Deletes the object from the store. */
public function DoDelete(http\Request $request, http\Response $response)
{
- $this->model->SetFrom(array_merge($request->data, $request->data['_POST']));
try {
$this->model->Delete();
} catch (ModelException $e) {
/*! Updates an object in the store. */
public function DoPut(http\Request $request, http\Response $response)
{
- $this->model->SetFrom(array_merge($request->data, $request->data['_POST']));
try {
$this->model->Insert();
$response->data = $this->model->Fetch();