1: <?php
2:
3: defined('BASEPATH') OR exit('No direct script access allowed');
4:
5: // This can be removed if you use __autoload() in config.php OR use Modular Extensions
6: require APPPATH . '/libraries/REST_Controller.php';
7:
8: /**
9: * This is an example of a few basic user interaction methods you could use
10: * all done with a hardcoded array
11: *
12: * @package CodeIgniter
13: * @subpackage Rest Server
14: * @category Controller
15: * @author Phil Sturgeon, Chris Kacerguis
16: * @license MIT
17: * @link https://github.com/chriskacerguis/codeigniter-restserver
18: */
19: class Example extends REST_Controller {
20:
21: function __construct()
22: {
23: // Construct the parent class
24: parent::__construct();
25:
26: // Configure limits on our controller methods
27: // Ensure you have created the 'limits' table and enabled 'limits' within application/config/rest.php
28: $this->methods['user_get']['limit'] = 500; // 500 requests per hour per user/key
29: $this->methods['user_post']['limit'] = 100; // 100 requests per hour per user/key
30: $this->methods['user_delete']['limit'] = 50; // 50 requests per hour per user/key
31: }
32:
33: public function users_get()
34: {
35: // Users from a data store e.g. database
36: $users = [
37: ['id' => 1, 'name' => 'John', 'email' => 'john@example.com', 'fact' => 'Loves coding'],
38: ['id' => 2, 'name' => 'Jim', 'email' => 'jim@example.com', 'fact' => 'Developed on CodeIgniter'],
39: ['id' => 3, 'name' => 'Jane', 'email' => 'jane@example.com', 'fact' => 'Lives in the USA', ['hobbies' => ['guitar', 'cycling']]],
40: ];
41:
42: $id = $this->get('id');
43:
44: // If the id parameter doesn't exist return all the users
45:
46: if ($id === NULL)
47: {
48: // Check if the users data store contains users (in case the database result returns NULL)
49: if ($users)
50: {
51: // Set the response and exit
52: $this->response($users, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code
53: }
54: else
55: {
56: // Set the response and exit
57: $this->response([
58: 'status' => FALSE,
59: 'message' => 'No users were found'
60: ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code
61: }
62: }
63:
64: // Find and return a single record for a particular user.
65:
66: $id = (int) $id;
67:
68: // Validate the id.
69: if ($id <= 0)
70: {
71: // Invalid id, set the response and exit.
72: $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST); // BAD_REQUEST (400) being the HTTP response code
73: }
74:
75: // Get the user from the array, using the id as key for retreival.
76: // Usually a model is to be used for this.
77:
78: $user = NULL;
79:
80: if (!empty($users))
81: {
82: foreach ($users as $key => $value)
83: {
84: if (isset($value['id']) && $value['id'] === $id)
85: {
86: $user = $value;
87: }
88: }
89: }
90:
91: if (!empty($user))
92: {
93: $this->set_response($user, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code
94: }
95: else
96: {
97: $this->set_response([
98: 'status' => FALSE,
99: 'message' => 'User could not be found'
100: ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code
101: }
102: }
103:
104: public function users_post()
105: {
106: // $this->some_model->update_user( ... );
107: $message = [
108: 'id' => 100, // Automatically generated by the model
109: 'name' => $this->post('name'),
110: 'email' => $this->post('email'),
111: 'message' => 'Added a resource'
112: ];
113:
114: $this->set_response($message, REST_Controller::HTTP_CREATED); // CREATED (201) being the HTTP response code
115: }
116:
117: public function users_delete()
118: {
119: $id = (int) $this->get('id');
120:
121: // Validate the id.
122: if ($id <= 0)
123: {
124: // Set the response and exit
125: $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST); // BAD_REQUEST (400) being the HTTP response code
126: }
127:
128: // $this->some_model->delete_something($id);
129: $message = [
130: 'id' => $id,
131: 'message' => 'Deleted the resource'
132: ];
133:
134: $this->set_response($message, REST_Controller::HTTP_NO_CONTENT); // NO_CONTENT (204) being the HTTP response code
135: }
136:
137: }
138: