CodeIgniter Преобразует массив в Json

#php #json

Вопрос:

приведенный ниже php — код использует codeigniter для выбора в бд, поэтому массив должен быть преобразован, для этого я использую приведенный ниже код, но он не преобразует json (json указан в gist), поэтому он не преобразуется в массив json.

Основная ссылка json: https://gist.github.com/riccardopirani/2a48e8e62fa65512fd487de0ca82bc79

Controller.php

 class Api2 extends CI_Controller {
    
    function __construct() {
        parent::__construct();
        $this->load->model('Book_model');
    }


    function index() {
        header('Content-Type: application/json');
        //print link element
        $array = array(
            "foo" => "bar",
            "bar" => "foo",
        );
        $values["data"] = $this->Book_model->get_all_books();
        /*foreach($_GET as $key => $value){
            echo $key . " : " . $value . "n";
        } */
        //Return data
        // $data = json_encode($tempdata);
        print_r(json_encode($values["data"]));
        return (json_encode($values["data"]));
 

Model.php

 <?php

class Book_model extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }
    
    /*
     * Get book by id
     */
    function get_book($id)
    {
        return $this->db->get_where('books',array('id'=>$id))->row_array();
    }
        
    /*
     * Get all books
     */
    public function get_all_books()
    {
        $this->db->order_by('id', 'desc');
        return $this->db->get('books')->result_array();
    }
        
    /*
     * function to add new book
     */
    function add_book($params)
    {
        $this->db->insert('books',$params);
        return $this->db->insert_id();
    }
    
    /*
     * function to update book
     */
    function update_book($id,$params)
    {
        $this->db->where('id',$id);
        return $this->db->update('books',$params);
    }
    
    /*
     * function to delete book
     */
    function delete_book($id)
    {
        return $this->db->delete('books',array('id'=>$id));
    }
}
 

Ответ №1:

Я думаю, что вам следует поставить echo вместо return контроллера Api2

 public function index()
{
    header('Content-Type: Application/json');
    $values['data'] = $this->Book_model->get_all_books();

    echo json_encode($values['data']);
}
 

или вы можете использовать встроенную функцию output из CodeIgniter

 public function index()
{
    $values['data'] = $this->Book_model->get_all_books();

    $this->output
         ->set_content_type('application/json', 'utf8')
         ->set_output( json_encode($values['data']) );
}
 

Комментарии:

1. Я пробовал ваши решения, но они не работают, от остальных звонков ничего не возвращается

2. вы уверены, что дважды проверяете имя функции и конечную точку при вызове API?