I am trying to build a Wishlist application with a REST API and Backbone.js. I'm having trouble with the routes. I have an ApiHandler Controller in controllers/api
. I'm getting the following error when trying to display the view.
A PHP Error was encountered
Severity: Notice
Message: Undefined property: ApiHandler::$format
Filename: libraries/REST_Controller.php
Line Number: 798
Backtrace:
File: C:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line: 798
Function: _error_handler
File: C:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line: 703
Function: response
File: C:xampphtdocs2017464WishList-Appindex.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:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line: 816
Function: _error_handler
File: C:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line: 703
Function: response
File: C:xampphtdocs2017464WishList-Appindex.php
Line: 315
Function: require_once
An uncaught Exception was encountered
Type: Error
Message: Call to a member function factory() on null
Filename: C:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line Number: 816
Backtrace:
File: C:xampphtdocs2017464WishList-AppapplicationlibrariesREST_Controller.php
Line: 703
Function: response
File: C:xampphtdocs2017464WishList-Appindex.php
Line: 315
Function: require_once
This is my Controller ApiHandler class
<?php defined('BASEPATH') OR exit('No direct script access allowed');
use RestserverLibrariesREST_Controller;
require APPPATH . '/libraries/REST_Controller.php';
require APPPATH . '/libraries/Format.php';
class ApiHandler extends RestserverLibrariesREST_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',TRUE),
'email'=>$this->post('email',TRUE),
'password'=>$this->post('password',TRUE),
'wishlist_name'=>$this->post('wishlist_name',TRUE),
'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',TRUE),
'email'=>$this->post('email',TRUE),
'username'=>$this->post('username',TRUE),
'password'=>password_hash($this->post('password',TRUE)),
'wishlist_name'=>$this->post('wishlist_name',TRUE),
'wishlist_description'=>$this->post('wishlist_description',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','Username','trim|required');
$this->form_validation->set_rules('password','Password','trim|required|maxlength[100]');
if($this->form_validation->run()==FALSE){
//Form Validation Errors
$message = array(
'status'=> FALSE,
'error'=>$this->form_validation->error_array(),
'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);
}
}
}
}
The view includes all the pages to be displayed registration and also login
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="co