<?php namespace FluentForm\Framework\Http; use WP_REST_Response; use ReflectionException; use FluentForm\Framework\Foundation\App; use FluentForm\Framework\Validator\ValidationException; abstract class Controller { /** * @var \FluentForm\Framework\Foundation\Application */ protected $app = null; /** * @var \FluentForm\Framework\Request\Request */ protected $request = null; /** * @var \FluentForm\Framework\Response\Response */ protected $response = null; public function __construct() { $this->app = App::getInstance(); $this->request = $this->app['request']; $this->response = $this->app['response']; } public function validate($data, $rules, $messages = []) { try { $validator = $this->app->validator->make($data, $rules, $messages); if ($validator->validate()->fails()) { throw new ValidationException( 'Unprocessable Entity!', 422, null, $validator->errors() ); } return $data; } catch (ValidationException $e) { if (defined('REST_REQUEST') && REST_REQUEST) { throw $e; }; $this->app->doCustomAction('handle_exception', $e); } } public function json($data = null, $code = 200) { return $this->response->json($data, $code); } public function send($data = null, $code = 200) { do_action( 'litespeed_control_set_nocache', 'fluentform api request' ); nocache_headers(); return $this->response->send($data, $code); } public function sendSuccess($data = null, $code = 200) { nocache_headers(); do_action( 'litespeed_control_set_nocache', 'fluentform api request' ); return $this->response->sendSuccess($data, $code); } public function sendError($data = null, $code = null) { nocache_headers(); do_action( 'litespeed_control_set_nocache', 'fluentform api request' ); return $this->response->sendError($data, $code); } public function __get($key) { try { return App::getInstance($key); } catch(ReflectionException $e) { $class = get_class($this); wp_die("Undefined property {$key} in $class"); } } public function response($data, $code = 200) { do_action( 'litespeed_control_set_nocache', 'fluentform api request' ); nocache_headers(); return new WP_REST_Response($data, $code); } }