У меня возникла проблема с использованием библиотеки form_validation с CodeIgniter 3.x:
Я хочу использовать модельную функцию как правило проверки для ввода. Когда я отправляю свою форму, кажется, что функция вообще не называется. Согласно руководству пользователя, здесь, как я это делаю с моего контроллера:
if($this->input->post() !== false)
{
$this->form_validation->set_rules(
'username', //the post value to check
'User Name',
array(
'trim',
'required',
array($this->user_model, 'checkUserName') // i want to call checkUserName from the user_model model
)
);
Я не понимаю, почему он даже не вызывает функцию checkUserName в user_model: есть ли у кого-нибудь идеи?
[EDIT]: Я видел исходный код для функции set_rules() в system/libraries/form_validation.php. Похоже, что если третий параметр не является строкой, он ничего не делает, поэтому я не могу вызвать функцию модели. userguide не выдерживает? Здесь строки кода, которые я нашел из form_validation:
// No fields? Nothing to do...
if ( ! is_string($field) OR ! is_string($rules) OR $field == '')
{
return $this;
}
'premium_dates' => [
'field' => 'premium_dates',
'label' => 'Premium dates',
'rules' => [
'trim',
['validate_premium_dates', function () {
return $this->Properties_seasons_model->validate_premium_dates();
}],
],
'errors' => [
'validate_premium_dates' => 'Premium dates enabled. Please choose at least one Premium Date.',
],
];
если вы проверяете имя пользователя, чтобы не дублировать используемую встроенную функцию is_unique['table.field]
.
table: имя таблицы.
field: имя поля, которое будет проверяться.
$this->form_validation->set_rules('username', User Name, 'is_unique['users.username]');
это проверит пользователей dbtable для поля Username. Если предоставленное имя пользователя найдет, оно вернет имя пользователя ошибки не уникальное.
это is_unique()
функция, определенная в классе form_validation:
public function is_unique($str, $field)
{
sscanf($field, '%[^.].%[^.]', $table, $field);
return isset($this->CI->db)
? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
: FALSE;
}
если вы действительно хотите назвать свою собственную функцию, тогда...
лучше всего расширить класс form_validation: как следует.
class MY_Form_validation extends CI_Form_validation {
protected $CI;
public function __construct()
{
parent::__construct();
$this->CI =& get_instance();
}
public function check_user_name($str)
{
//here you codes goes eg.$this->CI->db->get_where(); etc.
}
}