Создание файла обработчика формы

Проверка выполнения кода

 

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

Иногда бывает более целесообразно не создавать отдельный файл-обработчик, а код для обработки формы прописать прямо в файле шаблона страницы, где находится и сама форма. Это особенно удобно в том случае, если после обработки полученных данных снова открывается эта же страница, т.е. фактически получается, что обработка происходит во время перезагрузки. Например, это очень удобно сделать на странице настроек компонента; в этом случае если пользователь вводит или изменяет какие-либо параметры и нажимает кнопку "Сохранить", происходит полная перезагрузка страницы, в результате чего данные сохраняются и тут же выводятся в обновлённом виде. Об этом подробно будет рассказано в главе 20.

 

Создание файла обработчика формы и метода в контроллере

Подобного типа файлы, как это уже было сказано в главе 2, должны располагаться в папке  model . Откройте редактор Notepad++, создайте и сохраните в указанной папке пустой файл new_mess.php, но не закрывайте его после создания - он ещё чуть позже пригодится. Теперь откройте файл контроллера controller.php (не забудьте, что всё это делается в основной папке компонента  com_feefback_form , расположенной в  components , административную часть в папке  administrator  пока не рассматриваем).

В контроллере уже есть один метод, теперь пришло время добавить другой, который будет запускать файл обработчика. Для этого припишите простой код:

  24    /**
  25    * Метод для запуска обработчика формы
  26    * @access public
  27    */
  28    function process_new_mess()
  29        {
  30            require(JPATH_COMPONENT .'/model/new_mess.php');
  31        }

 Обратите внимание на возможную ошибку: этот код должен быть прописан внутри класса контроллера, поэтому проверьте наличие закрывающей класс фигурной скобки!

Почему метод назван process_new_mess, а не как-то по-другому? Обратите внимание на главу 8, строку 30 кода файла шаблона формы обратной связи (tpl_new_mess.php): там в атрибуте action указан адрес:

/index.php?option=com_feedback_form&task=process_new_mess

Обратите внимание на значение переменной task - это и есть название метода, к которому обратиться система при переадресации запроса. А функция require в указанном методе запускает файл обработчика формы, всё просто!

 

Проверка выполнения кода

Теперь можно попробовать, всё ли сделано правильно.

Для начала снова откройте в редакторе файл обработчика (new_mess.php) и пропишите простейший код:

  1    <pre>
  2    <?php
  3    /**
  4    * @Author WDS
  5    * @subpackage Components
  6    * @link Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
  7    * @license GNU/GPL
  8    * @copyright Copyright (C) 2019
  9    */
 10   // ЗАЩИТА ОТ НЕСАНКЦИОНИРОВАННОГО ДОСТУПА
 11   defined( '_JEXEC' ) or die( 'Доступ запрещен...' );
 12   print_r($_POST);
 13   print_r($_POST);
 14   ?>
 15   </pre>

 В начале и в конце кода установлены временные теги <pre> и </pre>. Это нужно для более удобного вывода информации на экран (см. ниже).

Далее, как обычно, следует открывающий тег, сопроводительная информация и защита от несанкционированного доступа. А вот в строках 11-12 временно прописаны две функции print_r, выводящие удобочитаемую информацию, содержащуюся в переменных $_POST и $_POST.

Теперь запустите локальный сервер, откройте сайт и страницу "Обратная связь". Выберите тип сообщения из предложенного списка, введите какой-либо небольшой текст, например, "этот текст создан для проверки работы формы обратной связи", выберите какое-либо изображение (не важно какое, главное что бы было) и  нажмите "Отправить!". В результате вы получите на экране распечатку содержимого указанных выше переменных в виде двух массивов - как именно это и описано в главе 14.

Закройте сайт, вернитесь в редактор и удалите в коде временные элементы - теги  <pre> и </pre>, а так же строки 12 и 13 (функции print_r) и переходите к следующей главе.

 

Добавлять комментарии и ответы могут только пользователи, прошедшие регистрацию!
Зарегистрируйтесь и напишите своё мнение или ответ!