Код основного файла компонента
Защита от несанкционированного доступа
Включение и выполнение файла контроллера
Создание экземпляра класса контроллера
Команда выполнить задачу, указанную в запросе
Как уже было сказано во второй главе, при поступлении запроса система обращается к основному файлу компонента, который всегда имеет тоже имя, что и сам компонент и находится в главной папке com_my_component , которые в свою очередь находится после установки в папке components сайта.
Задача данного файла довольно проста: создание класса компонента и передача управления контроллеру. Так же иногда в этом файле могут создаваться общие для компонента константы или функции. Рассмотрим код файла.
1 <?php
2 /**
3 * @Autor WDS-S.D.A.
4 * @subpackage Components
5 * components/com_feedback_form
6 * @license GNU/GPL
7 * @copyright Copyright (C) 2020
8 */
9 // Защита от прямого обращения к скрипту
10 defined( '_JEXEC' ) or die( 'Restricted access' );11 // Создание константы
12 if (!defined('FEED_FORM_COM_P')) {
13 define('FEED_FORM_COM_P', __DIR__);
14 }
15 // Подключение и выполнение файла контроллера
16 require_once( JPATH_COMPONENT.DS.'controller.php' );17 // Создание экземпляра класса контроллера
18 $controller = new FeedbackFormController( );
19 // Выполнение задачи запроса
20 $controller->execute( JRequest::getVar( 'task' ) );
21 // Переадресация
22 $controller->redirect();23 ?>
Код основного файла компонента
Строка 1 содержит открывающий тег <?php.
В строках 2-8 содержится общая информация о файле: имя автора, к чему принадлежит (компонент, модуль и т.п.), папка установки, лицензия, копирайт и так далее. Сюда так же можно дописать всё, что угодно, любую важную для вас информацию - система игнорирует всё, что находится между /** и */ (но в любом случае каждая новая строка должна начинаться со звёздочки).
Обратите внимание: если вам необходимо прописать в коде короткую информацию в одной строке, как например, в строках 9, 11, используйте //.
Защита от несанкционированного доступа
Строки 9-10 содержат очень важный элемент кода - защиту от несанкционированного доступа.
Работает это так.
При поступлении запроса от пользователя основной "входящий" файл сайта index.php, расположенный в главной папке, создаёт константу _JEXEC. Любой файл сайта в самом начале содержит выражение
defined( '_JEXEC' ) or die( 'Restricted access' );
задача которого проверить наличие данной константы при помощи функции defined. Если константа существует, т.е. запрос пользователя поступил как это и положено через основной файл index.php, нижеследующий код будет выполнен. Если же запрос от пользователя поступил непосредственно на данный файл (например, пользователь ввёл в поисковую строку
https://my_site.ru/components/com_feedback_form.php)
при проверке наличия константы _JEXEC функция defined обнаружит, что указанной константы не существует, и запретит серверу выполнять дальнейший код, в результате чего пользователь получит пустой экран.
При составлении любого кода обязательно используйте данное выражение в самом начале файла!
Создание констант
В строках 11-14 создаётся константа, используемая во всём компоненте. Это необязательный пункт для этого файла, но если вы решите создать константы, то здесь это можно сделать очень удобно.
Выражение, прописанное в строках 11-14, можно прочитать как "если именованная константа FEED_FORM_COM_P не существует (опять применяется функция defined), то её необходимо создать (функция define) со значением __DIR__.
__DIR__ - это "магическая", предопределённая константа, возвращающая каталог файла. Если используется внутри include, возвращается каталог включенного файла.
Включение и выполнение файла контроллера
Строка 16 включает и выполняет файл контроллера, который создаёт класс контроллера. Это делается при помощи функции require_once.
Функция require_once аналогична функции include, в её задачу так же входит включить и выполнить указанный файл, но с той разницей, что при обнаружении ошибки выполнение файла будет остановлено, а в случае использования include - продолжено (с выдачей предупреждения). Приставка _once означает, что указанный файл перед запуском будет проверен, включался ли он ранее. Если включался, то повторного включения не произойдёт.
Обратите внимание на указанный путь к файлу JPATH_COMPONENT.DS.'controller.php', где
- JPATH_COMPONENT - это константа, указывающая путь к данному компоненту;
- DS - указание системе автоматически определить, какой тип косой черты должен быть применён (/ или \, т.е. слеш или бэкслеш);
- 'controller.php' - название файла, причём оно берётся в одинарные кавычки.
Создание экземпляра класса контроллера
Строка 18 создаёт экземпляр класса контроллера в виде переменной $controller.
Выполнение задачи, указанной в запросе
Строка 20 указывает системе, что необходимо выполнить задачу (execute), указанную в запросе; при этом функция JRequest::getVar( 'task' ) находит в URL что именно нужно сделать - это прописано в переменной task. В дальнейшем это будет рассмотрено более подробно.
Установка переадресации
Строка 22 устанавливает переадресацию, т.е. передаёт управление файлу controller.php.
Пропишите указанный код в основном файле компонента feedback_form.php (откройте при помощи редактора Notepad++, внесите код и сохраните) и переходите к следующему файлу.