问题描述
我正在尝试使用 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> 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> 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 (将#修改为@)