Как вызвать имя метода в действии формы при работе с REST API с использованием codeigniter? - PullRequest
0 голосов
/ 24 мая 2018

Привет всем, я работаю над REST API в Codeigniter, но меня удивляет нормальный codeigniter, когда мы даем имя метода после контроллера, например (localhost / project_name / controller / user_get), он получит всех пользователей из таблицы, но при работе с RESTAPI в Codeigniter Я получаю неизвестный метод ошибки, пожалуйста, скажите мне, как определить имя метода, в то время как остальные API в действии формы

ниже я написал свой код

на странице просмотра, когда я хочу нажать кнопкупо форме он должен вызывать метод и извлекать всех пользователей

<form method="post" action="<?=base_url('index.php/Api/user_get')?>">

    <button>Click Here</button>


</form>

код контроллера

<?php

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

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

class Api extends REST_Controller {

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


  public function user_get() {   //this method will get all users from table
            $r = $this->user_model->read();
            $this->response($r);
        }


      public function user_put() { //this method will insert users details 
           $id = $this->uri->segment(3);
            $data = array('name' => $this->input->get('user_name'),
                'pass' => $this->input->get('user_password'),
                'type' => $this->input->get('user_type')
            );
            $r = $this->user_model->update($id, $data);
            $this->response($r);
        }

}

Ниже кода, написанного в модели

открытая функция read () {

   $query = $this->db->query("select * from `tbl_user`");

   return $query->result_array();

}

Получение такой ошибки

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Контроллер покоя предназначен для реакции с различными видами HTTP методов, что означает, что у вас есть только один URL, но множество различных методов.

разрешено methodsпо умолчанию get, delete, post, put, options, patch, head.Для более подробной информации посмотрите здесь :

Пример из реального мира на основе вашего вопроса:

Прежде всего, каждый раз, когда вы вводите адрес в браузере и нажимаете Enter Вы делаете GET Запрос.

Вам не нужен суффикс _get в вашем браузере - об остальном позаботится контроллер.Он распознает это и добавляет к своей функции добавочный суффикс _get, который означает, что вы должны ввести в браузере:

localhost:81/sample_api/index.php/api/user/

Теперь Rest Controller проверяетваш тип Request, распознает его как запрос GET и пытается вызвать функцию user_get.

То же самое относится к вашей форме, если вы создаете форму с помощью метода POST идействие, подобное <?=base_url('index.php/Api/user')?>, контроллер знает свой запрос POST и пытается вызвать функцию user_post.

Таким образом, ваш контроллер должен выглядеть так:

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

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

class Api extends REST_Controller 
{

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


    public function user_get() {   
        //this method will get all users from table
        $r = $this->user_model->read();
        $this->response($r);
    }


    public function user_post() { //this method will insert users details 
        $id = $this->uri->segment(3);
        $data = array(
            'name' => $this->input->post('user_name'),
            'pass' => $this->input->post('user_password'),
            'type' => $this->input->post('user_type')
        );
        $r = $this->user_model->update($id, $data);
        $this->response($r);
    }

}

и ваш вид

<form method="post" action="<?=base_url('index.php/api/user')?>">
    <button>Click Here</button>
</form>

Обновление

Rest_Controller позволяет вам определять различные типы методов запроса через field, называемый _method, что означает, что вы можете использовать вручнуюустановите его в своей форме, как показано ниже:

<form method="post" action="<?=base_url('index.php/api/user')?>">
    <input type="hidden" name="_method" value="put" />
    <button>Click Here</button>
</form>

Вам просто нужно установить переменную enable_emulate_request в вашей конфигурации покоя на true.

Вы можете найти эту информацию здесь


Все это магия происходит в методе _remap, как вы можете видеть здесь .

0 голосов
/ 25 мая 2018

Вы не добавляете echo и, во-вторых, не загружаете URL помощника, это поможет вам.

  1. Если вы хотите опубликовать, чем вы исправите это
  2. Если вы хотите получить, чем у вас есть

<form method="post" action="<?php echo base_url('index.php/Api/user_put'); ?>">
<form method="get" action="<?php echo base_url('index.php/Api/user_get'); ?>">

ве звонить как

0 голосов
/ 24 мая 2018

попробуйте это:

function users_get()
{
    $users = $this->user_model->get_all();

    if($users)
    {
        $this->response($users, 200);
    }

    else
    {
        $this->response(NULL, 404);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...