Контроллер покоя предназначен для реакции с различными видами 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
, как вы можете видеть здесь .