REST-сервер Фила Стерджона, Codeigniter3, сообщения об ошибках не возвращаются на PUT

Я использую сервер REST Фила Стерджена, CI3 и POSTMAN для отладки. Я отправляю PUT с информацией ниже, однако я не получаю ожидаемых сообщений об ошибках.

Вот мой form_validation.php:

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

$config = array(
'student_put' => array(
array('field' => 'email_address', 'label' => 'email_address', 'rules' => 'trim|required|valid_email'),
array('field' => 'password', 'label' => 'password', 'rules' => 'trim|required|min_length[8]|max_length[16]'),
array('field' => 'first_name', 'label' => 'first_name', 'rules' => 'trim|required|max_length[50]'),
array('field' => 'last_name', 'label' => 'last_name', 'rules' => 'trim|required|max_length[50]'),
array('field' => 'phone_number', 'label' => 'phone_number', 'rules' => 'trim|required|alpha_dash'),
)
);

?>

Вот мой метод в моем контроллере Api.php:

function student_put(){
$this->form_validation->set_data($this->put());
// these are the rules set in config/form_validation.php
if ($this->form_validation->run('student_put') != FALSE) {
die('good data');
} else {
$this->response(
array(
'status'=> 'failure',
'message'=> $this->form_validation->get_errors_as_array(),
),
REST_Controller::HTTP_BAD_REQUEST
);
}
}

Это в моей папке с библиотеками, как MY_Form_validation.php:

<?php

class MY_Form_validation extends CI_Form_validation {

function __construct($rules = array()) {
parent::__construct($rules);
$this->ci =& get_instance();
}

public function get_errors_as_array() {
return $this->_error_array;
}

public function get_config_rules() {
return $this->_config_rules;
}

public function get_field_names($form) {
$field_names = array();
$rules = $this->get_config_rules();
$rules = $rules[$form];
foreach ($rules as $index=> $info) {
$field_names[] = $info['field'];
}
return $field_names;
}
}

Когда я помещаю следующее в POSTMAN:

X-API-KEY          123456
first_name         test
email_address      abc

Вот результат, который я получаю:

{
"status": "failure",
"message": []
}

Но я должен получить ошибки проверки.

В качестве шагов отладки я подтвердил:
— нет ошибок аутентификации
— читается form_validation.php
— если я изменю:

'message'=> $this->form_validation->get_errors_as_array(),

в

'message'=> 'test',

почтальон возвращается:

{
"status": "failure",
"message": "test"}

Любая помощь очень ценится.

6

Решение

Вы должны прочитать эту ссылку,

http://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter-2—net-8814

если вы используете apikey, вы должны установить

    $config['rest_auth'] = 'basic'
$config['rest_enable_keys'] = TRUE;

также сделать таблицу в базе данных для хранения API-ключа

CREATE TABLE `keys` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`key` VARCHAR(40) NOT NULL,
`level` INT(2) NOT NULL,
`ignore_limits` TINYINT(1) NOT NULL DEFAULT '0',
`is_private_key` TINYINT(1)  NOT NULL DEFAULT '0',
`ip_addresses` TEXT NULL DEFAULT NULL,
`date_created` INT(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

вставьте в эту базу данных минимум 1 строку, ключ только для важного столбца, это apikey

Apikey должен содержать 40 цифр, буквенно-цифровой из соображений безопасности

и снова, вы должны прочитать документацию, а остальные.php в application / config

    $config['rest_valid_logins'] = ['admin' => '1234'];

этот логин установлен по умолчанию, поэтому вы должны вставить этот логин в заголовок клиентского запроса и т. д.

    http_user           'admin'
http_pass           '1234'
X-API-KEY           '123456'
first_name          test
email_address       abc

если этот заголовок не работает, попробуйте это

    http_user           'admin'
http_pass           '1234'
api_name            'X-API-KEY'
api_key             '123456'
first_name          test
email_address       abc

если у вас есть запрос, как это раньше с вашим

    $config['rest_auth'] = FALSE

на самом деле вы еще не обеспечили безопасность своего веб-сервиса API

3

Другие решения

Я помещал переменные PUT во вкладку Headers в POSTman.

Только X-API-KEY принадлежит в заголовке запроса. Остальные данные (например, email_address, first_name и т. Д.) Должны быть переданы в теле запроса (например, на вкладке Body в POSTman).

Теперь все работает правильно.

0