.. / Проверка форм c Validation library в CodeIgniter

    Для валидации содержимого форм в CI есть класс validation Работает он достаточно просто. Для полей подлежащих проверке устанавливаются правила. После отправки данных формы на сервер они проходят проверку по этим правилам, Если обнаруживается нарушение правил, формируется сообщение об ошибке с перечнем нарушений. Сообщение вместе с данными отправляется обратно для исправления пользователем ошибок.

    Набор проверочных правил в CI достаточно широкий. Для проверок возможно использование регулярных выражений. Там где регулярное выражение не спасает, можно ввести специальную функцию - обработчик поля. Дополнительно к этому для полей создаются правила обработки. Например - удаление тегов, концевых пробелов и т.п. Весь перечень правил можно найти в руководстве CI

    Здесь и далее для примера берем заготовку блока из Прелюдии

    1. Проверка обязательных полей

    Для примера будем проверять обязательность одного единственного поля author в методе контроллера save (S:\system\application\controllers\blog.php):

    function save()
      {
          //подгрузка библиотеки валидации данных
          $this->          load->          library('validation');
    
          //описание правила проверки поля author
          $rules['author']    = "required";
          $this->          validation->          set_rules($rules);
    
          // название поля author для текста аварийного сообщения
          // в русском варианте $fields['author']    = 'Афтар';
          $fields['author']    = 'The Author';
          $this->          validation->          set_fields($fields);
    
          if (!$this->          validation->          run())  //  вызов проверки данных
          {
            //  проверка данных не прошла.
            $data=$_POST;
            //  вытаскиваем сообщение об ошибке из валидаторв
            $data['err']=$this->          validation->          error_string;
            // выводим данные полученные в результате валидации
            $this->          parser->          parse('edit.php',$data);
            return;
          }
    
          // в случае прохождения проверки постим данные в БД
          $this->          mblog->          data=$_POST;
          $this->          mblog->          update();
          $this->          view();
      }

    Пример можно уже запустить и он будет работать, но для отображения сообщения об ошибке необходимо доработать вьюер редактирования (S:\system\application\views\edit.php) добавив туда одну единственную строку:
    <div class="err"> {err}</div>
    и метод edit контроллера (S:\system\application\controllers\blog.php), для того, чтобы обнулить сообщение обо ошибке в режиме редактирования до проверки:
    function edit()
    {
       $data=$this->          mblog->          getOne($this->          uri->          segment(3));
       $data['err']='';
       $this->          parser->          parse('edit.php',$data);
    }


    Теперь можно вызвать страницу редактирования одного из сообщений http://localhost:100/blog/edit/1 и попытаться сохранить форму c пустым полем "Author". Codeigniter выплюнет сообщение на английском языке. Руссификацию сообщений рассмотрем далее.

    2. Дополнительные проверки

    В п.1. был рассмотрен пример, в котором проверялось только наличие поля. Как и в любой приличной библиотеке валидации количество всевозможных опций проверок в Codeigniter около десятка. Т.е. банальная проверка на наличие обязательного поля:
    $rules['author'] = "required";
    Может модифицироваться до
    $rules['author'] = "alpha|min_length[6]|max_length[16]";
    где кроме необоходимости наличие поля могут быть проверены:
    - наличие только букв: alpha
    - минимальная и максимальная длина: (min_length[6] max_length[16]
    и т.д. Конечно же есть доп.проверка валидности адресов e-mail и url Описание всех возможностей можно найти в мануале
    И конечно ложка дегтя.
    Вставить в правило регулярное выражение нельзя. Хотя предусмотрено выполнение сторонних функций.
    Для примера дополним правило функцией проверки на наличие в подписи нецензурного слова:
    $rules['author']    = "callback_fuck_check
    alpha
    min_length[6]
    max_length[16]";
    
    "callback_" - обязательный префикс "fuck_check" - название пользовательской функции. Пример функции (размещаем ее в контроллере S:\system\application\controllers\blog.php):
    function fuck_check($str)
    {
      if ($str !== 'fuck') return TRUE; // проверка пройдена. возвращаем TRUE
       // проверка не пройдена. Устанавливаем собственное сообщение об ошибке:
      $this->          validation->          set_message('fuck_check', 'Fuck himself!');
      return FALSE;
    }

    3. Cанобработка

    В учебном блоге, я отмечал что при записи данных я не позаботился о безопасности данных, отправляемых пользователем на сервер. Это означает что любой урод может вставить вместо подписи что-то типа:
    <img src="http://_голая_бритни_спирс_">
    или что еще хуже скрипт будет выполнять загрузку вируса. Ну и пр. Чтобы этого не произошло все данные из форм должны проходить предварительную обработку с целью очистки от потенциально опасных элементов. Правила для обработки задаются так же как и проверки:
    $rules['author'] = "required|trim|strip_tags|htmlspecialchars";
    где
    trim - устранение концевых пробелов,
    strip_tags - устранение тегов
    htmlspecialchars - замена кавычек, уголковых скобок и т.д. на HTML-сущности.
    Описание специфических опций Codeigniter можно найти в мануале При этом кроме них можно вставлять практически любые php-функии обработки строк.
    И конечно ложка дегтя.
    Обработка производится только после проверки на валидность.

    4. Резюме

    Несколько замечаний. В самом начале упоминалось о том, что мы как порядочные будем использовать модель. Но в этом топике от MVC опять пришлось отойти для большей наглядности. К сожалению, в Codeigniter (в отличие от других фреймворков типа Symphony или CakePHP), полноценная модель находится в зачаточном состоянии, но как нужно правильно описывать данные можно посмотреть на примере Supermodel Такая структура позволяет создание классов автоматического построения форм, валидации их на клиенте ну и вообще, это красиво (с) .
    Все что создано на этом шаге складываем в архивную папку step1.

    Между прочим

    По сравнению с возможностями VisualStudio более чем скромно, но все же лучше чем ничего.

    1. 2007-09-03
    1. bassistance.de/jquery-plugins/jquery-plugin-validation/ - jQuery plugin: ValidationjQuery plugin: Validation
Go Index Test