Class Example cannot extend from trait Restserver\Libraries\REST_Controller

前端 未结 1 1828
醉话见心
醉话见心 2020-12-30 15:20

I am trying to implement the following library in a new project.

\"chriskacerguis/codeigniter-restserver\": \"^3.0\"

I got a fre

相关标签:
1条回答
  • 2020-12-30 15:35

    You have to modify provided (and outdated until this answer's date) versions of application\libraries\REST_Controller.php and application\controllers\api\Example.php.

    application\libraries\REST_Controller.php

    • Add require APPPATH . 'libraries/REST_Controller_Definitions.php'; just before trait REST_Controller {
    require APPPATH . 'libraries/REST_Controller_Definitions.php';
    
    trait REST_Controller {
    

    application\controllers\api\Example.php

    • class Example extends CI_Controller { instead of class Example extends REST_Controller {
    • Place use REST_Controller { REST_Controller::__construct as private __resTraitConstruct; } as the first line after class Example extends CI_Controller {
    • Add parent::__construct(); and $this->__resTraitConstruct(); to __construct() function.
    • Change all response methods to HTTP response code instead of constants. For example $this->response($users, 200); instead of $this->response($users, REST_Controller::HTTP_OK);
    <?php
    use Restserver\Libraries\REST_Controller;
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    // This can be removed if you use __autoload() in config.php OR use Modular Extensions
    /** @noinspection PhpIncludeInspection */
    
    //To Solve File REST_Controller not found
    require APPPATH . 'libraries/REST_Controller.php';
    require APPPATH . 'libraries/Format.php';
    
    /**
     * This is an example of a few basic user interaction methods you could use
     * all done with a hardcoded array
     *
     * @package         CodeIgniter
     * @subpackage      Rest Server
     * @category        Controller
     * @author          Phil Sturgeon, Chris Kacerguis
     * @license         MIT
     * @link            https://github.com/chriskacerguis/codeigniter-restserver
     */
    class Example extends CI_Controller {
    
        use REST_Controller {
            REST_Controller::__construct as private __resTraitConstruct;
        }
    
        function __construct()
        {
            // Construct the parent class
            parent::__construct();
            $this->__resTraitConstruct();
    
            // Configure limits on our controller methods
            // Ensure you have created the 'limits' table and enabled 'limits' within application/config/rest.php
            $this->methods['users_get']['limit'] = 500; // 500 requests per hour per user/key
            $this->methods['users_post']['limit'] = 100; // 100 requests per hour per user/key
            $this->methods['users_delete']['limit'] = 50; // 50 requests per hour per user/key
        }
    
        public function users_get()
        {
            // Users from a data store e.g. database
            $users = [
                ['id' => 1, 'name' => 'John', 'email' => 'john@example.com', 'fact' => 'Loves coding'],
                ['id' => 2, 'name' => 'Jim', 'email' => 'jim@example.com', 'fact' => 'Developed on CodeIgniter'],
                ['id' => 3, 'name' => 'Jane', 'email' => 'jane@example.com', 'fact' => 'Lives in the USA', ['hobbies' => ['guitar', 'cycling']]],
            ];
    
            $id = $this->get('id');
    
            // If the id parameter doesn't exist return all the users
    
            if ($id === null)
            {
                // Check if the users data store contains users (in case the database result returns NULL)
                if ($users)
                {
                    // Set the response and exit
                    $this->response($users, 200); // OK (200) being the HTTP response code
                }
                else
                {
                    // Set the response and exit
                    $this->response([
                        'status' => false,
                        'message' => 'No users were found'
                    ], 404); // NOT_FOUND (404) being the HTTP response code
                }
            }
    
            // Find and return a single record for a particular user.
    
            $id = (int) $id;
    
            // Validate the id.
            if ($id <= 0)
            {
                // Invalid id, set the response and exit.
                $this->response(null, 400); // BAD_REQUEST (400) being the HTTP response code
            }
    
            // Get the user from the array, using the id as key for retrieval.
            // Usually a model is to be used for this.
    
            $user = null;
    
            if (!empty($users))
            {
                foreach ($users as $key => $value)
                {
                    if (isset($value['id']) && $value['id'] === $id)
                    {
                        $user = $value;
                    }
                }
            }
    
            if (!empty($user))
            {
                $this->set_response($user, 200); // OK (200) being the HTTP response code
            }
            else
            {
                $this->set_response([
                    'status' => false,
                    'message' => 'User could not be found'
                ], 404); // NOT_FOUND (404) being the HTTP response code
            }
        }
    
        public function users_post()
        {
            // $this->some_model->update_user( ... );
            $message = [
                'id' => 100, // Automatically generated by the model
                'name' => $this->post('name'),
                'email' => $this->post('email'),
                'message' => 'Added a resource'
            ];
    
            $this->set_response($message, 201); // CREATED (201) being the HTTP response code
        }
    
        public function users_delete()
        {
            $id = (int) $this->get('id');
    
            // Validate the id.
            if ($id <= 0)
            {
                // Set the response and exit
                $this->response(null, 400); // BAD_REQUEST (400) being the HTTP response code
            }
    
            // $this->some_model->delete_something($id);
            $message = [
                'id' => $id,
                'message' => 'Deleted the resource'
            ];
    
            $this->set_response($message, 204); // NO_CONTENT (204) being the HTTP response code
        }
    
    }
    

    Hope it helps, it works for me.

    0 讨论(0)
提交回复
热议问题