Codeigniter: вставьте строку, если set_value () пусто - PullRequest
1 голос
/ 11 марта 2012

Я понимаю, что set_value() используется для заполнения формы, если она не прошла проверку. Но если поле имеет значение empty() (поэтому оно не удалось), может ли set_value () вместо него вставить значение по умолчанию?

1 Ответ

1 голос
/ 11 марта 2012

Я нашел ответ.Он включает в себя перехват значения в set_rules() с использованием 2 функций обратного вызова.Я сократил код этого поста, чтобы его было легче понять.

Файл конфигурации:

// This is where the default text will come from so it's easy to modify
// The second config (['address']) is there just to show that ['test'] is an array
$config['test']['name'] = 'Default Text';
$config['test']['address'] = 'Some other text';

Правила:

// The sample rule. Do not add 'required' in the rules since _sanitize already
// does the checking for blank values. Insert the name of the field
// within the []. _sanitize() needs to be called before _check().
$this->form_validation->set_rules('name', 'Name', 'trim|callback__sanitize[name]|callback__check[name]');

2 функции обратного вызова: _sanitize () и _check ()

// CALLBACK: _sanitize
/*
* If field is empty(), inserts the default value found in the config file
* Works alongside _check().
*/
public function _sanitize($str, $arg){
  if(empty($str)){
    $text = $this->config->item('test');
    return $text[$arg];
  }

  // If !empty(), return the value as if nothing happened
  return $str;
}

// CALLBACK: _check
/*
* If value is equivalent to the default value (from the config file), mark it as FALSE
* Works alongside _sanitize().
*/
public function _check($str, $arg){
  $text = $this->config->item('test');

  if($str == $text[$arg]){
    $this->form_validation->set_message('_check', 'The %s field is required');
    return FALSE;
  }

  return TRUE;
}

Наконец, код для представления:

// Put at top of page
<?php
$name = array(
    'name'=>'name',
    'value'=>set_value('name'),
    'class'=>"form-text",
    'maxlength'=>200
);
?>

// Put within the page
<?php echo form_input($name); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...