遇到未定义的 PHP 错误:ApiHandler 类的属性格式 | Codeigniter REST API |主干.js

问题描述

我正在尝试使用 REST API 和 Backbone.js 构建一个 Wishlist 应用程序。我的路线有问题。我在 controllers/api 中有一个 ApiHandler 控制器。尝试显示视图时出现以下错误

A PHP Error was encountered
Severity: Notice

Message: Undefined property: ApiHandler::$format

Filename: libraries/REST_Controller.PHP

Line Number: 798

Backtrace:

File: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP
Line: 798
Function: _error_handler

File: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP
Line: 703
Function: response

File: C:\xampp\htdocs\2017464\WishList-App\index.PHP
Line: 315
Function: require_once

A PHP Error was encountered
Severity: Notice

Message: Undefined property: ApiHandler::$format

Filename: libraries/REST_Controller.PHP

Line Number: 816

Backtrace:

File: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP
Line: 816
Function: _error_handler

File: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP
Line: 703
Function: response

File: C:\xampp\htdocs\2017464\WishList-App\index.PHP
Line: 315
Function: require_once

An uncaught Exception was encountered
Type: Error

Message: Call to a member function factory() on null

Filename: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP

Line Number: 816

Backtrace:

File: C:\xampp\htdocs\2017464\WishList-App\application\libraries\REST_Controller.PHP
Line: 703
Function: response

File: C:\xampp\htdocs\2017464\WishList-App\index.PHP
Line: 315
Function: require_once

这是我的 Controller ApiHandler 类

<?PHP defined('BASEPATH') OR exit('No direct script access allowed');
use Restserver\Libraries\REST_Controller;
require APPPATH . '/libraries/REST_Controller.PHP';
require APPPATH . '/libraries/Format.PHP';

class ApiHandler extends Restserver\Libraries\REST_Controller
{

    public function __construct()
    {
        parent::__construct();
        //Load User Model
        $this->load->model('user_model','usermodel');
    }
public function register_post(){
        header("Access-Control-Allow-Origin: *");
        $data = array("returned");
        $this->response($data);
        // XSS Filtering (https://www.codeigniter.com/user_guide/libraries/security.html)
        $_POST = $this->security->xss_clean($_POST);

        $this->form_validation->set_data([
            'full_name'=>$this->post('full_name',TRUE),'username'=>$this->post('username','email'=>$this->post('email','password'=>$this->post('password','wishlist_name'=>$this->post('wishlist_name','wishlist_description'=>$this->post('wishlist_description',TRUE)
        ]);

        //Form Validation
        $this->form_validation->set_rules('full_name','Full Name','trim|required|maxlength[50');
        $this->form_validation->set_rules('username','Username','trim|required|is_unique[users.username]|max_length[20]',array('is_unique'=>'This %s already exists please enter another username'));
        $this->form_validation->set_rules('email','Email','trim|required|valid_email|max_length[80]',array('is_unique'=>'This %s already exists,please enter another email address.'));
        $this->form_validation->set_rules('password','Password','trim|required|max_length[100]');
        $this->form_validation->set_rules('wishlist_name','Wishlist Name','trim|required|max_length[100]');
        $this->form_validation->set_rules('wishlist_description','Wishlist Description','trim|required|max_length[1000]');

        if ($this->form_validation->run() == FALSE){
            //Form Validation
            $message = array(
                'status'=>FALSE,'error'=>$this->form_validation->error_array(),'message'=>validation_errors()
            );
            $this->response($message,REST_Controller::HTTP_NOT_FOUND);

        }else{
            //inserting data
            $insert_data = [
                'full_name'=>$this->post('full_name','password'=>password_hash($this->post('password',TRUE)),TRUE)
            ];

            //Insert the User into the Database
            $output = $this->usermodel->insert_user($insert_data);
            if ($output>0 AND !empty($output)){
                //Send Success code 200
                $message = [
                    'status'=>TRUE,'message'=>"User registration successful"
                ];
                $this->response($message,REST_Controller::HTTP_OK);
            }else{
                //Error
                $message = [
                    'status'=>FALSE,'message'=>"Account not registered"
                ];
                $this->response($message,REST_Controller::HTTP_NOT_FOUND);
            }
        }
    }

    /** User Login API
     * -------------------------
     * @param:username or email
     * @param: password
     * -------------------------
     * @method:POST
     * @link:api/user/login
     */
    public function login_post(){
        header("Access-Control-Allow-Origin:*");

        // XSS Filtering (https://www.codeigniter.com/user_guide/libraries/security.html)
        $_POST = $this->security->xss_clean($_POST);

        //Form Validation
        $this->form_validation->set_rules('username','trim|required');
        $this->form_validation->set_rules('password','trim|required|maxlength[100]');
        if($this->form_validation->run()==FALSE){
            //Form Validation Errors
            $message = array(
                'status'=> FALSE,'message'=>validation_errors()
            );

            $this->response($message,REST_Controller::HTTP_NOT_FOUND);
        }else{
            //Load the Login function
            $output = $this->user_login($this->post('username'),$this->post('password'));
            if (!empty($output)AND $output!= FALSE){
                //Load the Authorization Library
                $this->load->library('Authorization_Token');

                //Generate Token
                $token_data['id'] = $output->id;
                $token_data['full_name'] = $output->full_name;
                $token_data['username'] =$output->username;
                $token_data['email'] = $output->email;
                $token_data['time'] = time();

                $user_token = $this->authorization_token->generatetoken($token_data);

                $return_data = [
                    'user_id'=>$output->id,'full_name'=>$output->full_name,'email'=>$output->email,'wishlist_name'=>$output->wishlist_name,'wishlist_description'=>wishlist_description,'token'=>$user_token
                ];

                //Login Success
                $message = [
                    'status'=>TRUE,'data'=>$return_data,'message'=>"User Login Successful"
                ];
                $this->response($message,REST_Controller::HTTP_OK);

            }else{
                //Login error
                $message = [
                    'status'=>FALSE,'message'=>"Invalid Username or Password"
                ];
                $this->response($message,REST_Controller::HTTP_NOT_FOUND);
            }
        }
    }
}

该视图包括所有要显示页面注册登录 Wishlist_item

<!doctype html>
<html lang="en">
<head>
    <Meta charset ="utf-8">
    <title>WISH LIST</title>
    <!--favicon-->
    <link rel="icon" type="image/png" href="<?PHP echo base_url();?>assets/images/favicon.png">

    <!--CSS -->
    <link rel="stylesheet" href="<?PHP echo base_url();?>assets/css/font-awesome.min.css">
    <link href="<?PHP echo base_url();?>assets/css/bootstrap.min.css" rel="stylesheet">
    <link href="<?PHP echo base_url();?>assets/css/mdb.min.css" rel="stylesheet">

</head>
<body style="background-image: url('<?PHP echo base_url();?>assets/images/cover.png')">
    <div class="container">
        <!--Wish List-->
        <hr>
        <div class="newItem"></div>
        <div class="page"></div>
    </div>

    <!-- Javascript dependencies and Libraries-->
    <script src="<?PHP echo base_url();?>assets/js/jquery.min.js" type="text/javascript"></script>
    <script src="<?PHP echo base_url();?>assets/js/underscore-min.js" type="text/javascript"></script>
    <script src="<?PHP echo base_url();?>assets/js/backbone-min.js"></script>
    <script src="<?PHP echo base_url();?>assets/js/sweetalert.min.js"></script>
    <script type="text/javascript" src="<?PHP echo base_url();?>assets/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="<?PHP echo base_url();?>assets/js/mdb.min.js"></script>

    <!--Load the backbone models-->
    <script src="<?PHP echo base_url();?>assets/scripts/models/usermodel.js"></script>
    <script src="<?PHP echo base_url();?>assets/scripts/models/Itemmodel.js"></script>

    <!--load the backbone collections-->
    <script src="<?PHP echo base_url();?>assets/scripts/collections/WishlistCollection.js"></script>

    <!--load the backbone views-->
    <script src="<?PHP echo base_url();?>assets/scripts/views/LoginView.js"></script>
    <script src="<?PHP echo base_url();?>asserts/scripts/views/SignupView.js"></script>
    <script src="<?PHP echo base_url();?>assets/scripts/views/WishListView.js"></script>
    <script src="<?PHP echo base_url();?>assets/scripts/views/ShareListView.js"></script>

    <!--template for user login view-->
    <script type="text/template" id="user-login-template">
        <div class="container-fluid">
            <div style="text-align:center">
<!-- <img  style="width: 650px;" src="--><?PHP //echo base_url(); ?><!--assets/images/cover.png" >-->
            </div>
            <div style='justify-content: center;' class="row">
                <div style="" class="col-lg-8 col-md-10">
                    <!--Form without header-->
                    <div style="padding: 90px 20% 90px 20%" class="card">
                        <div class="card-block">
                            <!--Header-->
                            <div class="text-center">
                                <h3><i class="fa fa-lock"></i> &nbsp;Login:</h3>
                                <hr class="mt-2 mb-2">
                            </div>
                            <!--Body-->
                            <form class="user-login-form">
                                <div style='text-align: center; color: red;' class='error_msg'></div>
                                <div class="md-form">
                                    <i class="fa fa-envelope prefix"></i>
                                    <input type="text" name="username" required id="form2" class="form-control">
                                    <label for="form2">username</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-lock prefix"></i>
                                    <input type="password" name="password" required id="form4" class="form-control">
                                    <label for="form4">password</label>
                                </div>
                                <div class="text-center">
                                    <button type="submit" style="background:#2083e4" id="login-btn" class="btn btn-deep loginbtn">Login</button>
                                </div>
                        </div>
                        not a user? <a href="http://localhost/2017464/WishList-App/index.PHP/api/ApiHandler/register">Create a Account</a>
                    </div>
                </form>
                    <!--/Form without header-->
                </div>
            </div>
        </div>
    </script>
    <!--/End of template login-->

    <!--template for the user signup view-->
    <script type="text/template" id="user-signup-template">
        <div class="container-fluid">
            <div style='justify-content: center;' class="row">
                <div style="padding-top: 5%;
            padding-bottom: 8%;" class="col-lg-8 col-md-10">
                    <!--Form without header-->
                    <div style="padding: 90px 20% 90px 20%" class="card">
                        <div class="card-block">
                            <!--Header-->
                            <div class="text-center">
                                <h3><i class="fa fa-users"></i> &nbsp;Create NEW Account:</h3>
                                <hr class="mt-2 mb-2">
                            </div>
                            <!--Body-->
                            <form class="user-signup-form">
                                <div style='text-align: center; color: red;' class='error_msg'></div>
                                <div class="md-form">
                                    <i class="fa fa-user prefix"></i>
                                    <input type="text" name="full_name" required id="form1" class="form-control">
                                    <label for="form1">Full Name:</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-at prefix"></i>
                                    <input type="email" name="email" required id="form2" class="form-control">
                                    <label for="form2">E-mail:</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-user-circle prefix"></i>
                                    <input type="text" name="username" required id="form3" class="form-control">
                                    <label for="form3">username:</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-lock prefix"></i>
                                    <input type="password" name="password" required id="form4" class="form-control">
                                    <label for="form4">password:</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-th-list prefix"></i>
                                    <input type="text" name="wishlist_name" required id="form5" class="form-control">
                                    <label for="form5">Wish LIst Name:</label>
                                </div>
                                <div class="md-form">
                                    <i class="fa fa-info-circle prefix"></i>
                                    <input type="text" name="wishlist_description" required id="form6" class="form-control">
                                    <label for="form6">Description</label>
                                </div>
                                <div class="text-center">
                                    <button type="submit" style="background:#20c997" id="signup-btn" class="btn btn-deep signupbtn">SIGNUP</button>
                                </div>
                        </div>
                        already user? <a href="#/">Login</a>
                    </div>
                    </form>
                    <!--/Form without header-->
                </div>
            </div>
        </div>
    </script>
    <!--/End of template for user login view-->
<script>
        //fo edit wishist row
        var maxWishlist = 99999;

        //handle custom ajax call
        $.ajaxPrefilter(function (options,originalOptions,jqXHR) {
            options.url = 'http://localhost/2017464/WishList-App/api' + options.url;
        });

        //create object from form element
        function htmlEncode(value) {
            return $('<div/>').text(value).html();
        }
        $.fn.serializeObject = function () {
            var o = {};
            var a = this.serializeArray();
            $.each(a,function () {
                if (o[this.name] !== undefined) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        };

        //define backbone routes
        var Router = Backbone.Router.extend({
            routes: {
                "": "login","signup": "signup"
}
        });

        //create instance of router
        var router = new Router;
router.on('route:login',function () {
            loginView.render();
        })
        router.on('route:signup',function () {
            signupView.render();
        })
/start record routes
        Backbone.history.start();

</script>
</body>
</html>

要路由到注册登录页面,我使用了以下路由。

$route['user/register'] = 'api/ApiHandler/register';
$route['user/login'] = 'api/ApiHandler/login';

这是基本 URL:http://localhost/2017464/Wishlist-App/index.PHP/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)