Codeigniter RESTful API - {“status”:false,“error”:“未知方法。”}

时间:2014-01-13 13:44:51

标签: php mysql codeigniter rest

我设法在我的Codeigniter应用程序中设置RESTful API。现在我想从我的MySQL数据库中获取一些数据,所以在我的Codeigniter模型文件夹中,我创建了一个名为category_model.php的模型:

<?php
  Class category_model extends CI_Model {
      var $table_name = 'category';

     function get_all_categories()
     {
       $this->db->select('*');
       $this->db->from($this->table_name);
       return $this->db->get();
     }
 }
?>

然后在Codeigniter controller-folder中创建了一个category.php文件:

<?php

 include(APPPATH.'libraries/REST_Controller.php');

 class Category extends REST_Controller {

  function __construct()
    {
        parent::__construct();
        $this->load->model('category_model');
    }

  function category_get()
    {
        $data = $this->category_model->get_all_categories();
        $this->response($data);
    }

 }

?>

现在,当我输入http://localhost/myproejcts/ci/index.php/category/category时 - 我收到错误{"status":false,"error":"Unknown method."} ??

问题是什么?

[更新] =设置function index_post()

时出现同样的错误

6 个答案:

答案 0 :(得分:4)

取决于您对控制器的HTTP请求&#34;类别&#34;它会调用相关的方法:

public function index_get()
{   
    echo "GET_request";
}   

public function index_post()
{
    echo "POST_request";
}

public function index_put()
{
    echo "PUT_request";
}

public function index_patch()
{
    echo "PATCH_request";
}

public function index_delete()
{
    echo "DELETE_request";
}

因此,请将您的方法重命名为&#39; index_get&#39;

答案 1 :(得分:3)

我认为你的问题是控制器的名称与方法的名称相同,试着做一个测试:

如果控制器的名称是:

class Test extends CI_Controller{
    //your method name is different from the name of controller class
    public function testget_get(){ 
        echo $this->response(array('test'=> 'test'), 200);
    }
}

我在hmvc结构上遇到过这个问题。

答案 2 :(得分:0)

提及您要从数据库中获取的详细信息,并在 / restapi / application / config / database 文件中的数据库文件中输入正确的名称并运行代码。

由于数据库名称不正确而发生此错误

**<?php
  Class category_model extends CI_Model {
      var $table_name = 'category';
     function get_all_categories()
     {
       $this->db->select('name, email');
       $this->db->from($this->table_name);
       return $this->db->get();
     }
 }
?>**

答案 3 :(得分:0)

请更改班级名称,以大写字母开头,并确保文件名也以大写字母开头

<?php
  Class Category_model extends CI_Model {
      var $table_name = 'category';

     function get_all_categories()
     {
       $this->db->select('*');
       $this->db->from($this->table_name);
       return $this->db->get();
     }
 }
?>

答案 4 :(得分:0)

只需在控制器顶部的几行下写上

if (!defined('BASEPATH')) exit('No direct script access allowed');

use Restserver\Libraries\REST_Controller;

require APPPATH . 'libraries/REST_Controller.php';

require APPPATH . 'libraries/Format.php';

答案 5 :(得分:0)

在我的情况下,问题出在http上,如果您的服务器是https,应该是https