Комментарии

Проверка достоверности списка статей
( 0 Голосов )

Напомним, что ранее в XML-файл был введен атрибут validate"options" для установки параметров article_ordering и article_ordering_direction. Это было сделано с целью не дать злоумышленнику возможность ввести в форму злонамеренный код SQL в обход проверки достоверности. Посмотрим, как эта проверка действует на практике.

Как и в предыдущем примере, поле объекта типа JForm размечается атрибутом validate, а при сохранении формы в теле метода validate () из класса JForm происходит обращение к классу JFormRule, в котором установлено правило проверки достоверности вводимых данных. Значение данного атрибута должно совпадать с именем файла, в котором объявлен класс JFormRule. В данном случае атрибут validate имеет значение "options", а следовательно, файл должен иметь имя options.php, тогда как класс — JFormRuleOptions. Как упоминалось ранее, классы основных правил проверки достоверности хранятся в папке libraries/ joomla/form/rules. Но поскольку данное правило является основным, то указывать путь к упомянутой папке в атрибуте addrulepath из XML-файла совсем не обязательно.

В листинге ниже приведен исходный код из файла options.php.

Исходный код из файла libraries/joomla/form/rule/options.php

/**
* @package Joomla.Platform
* @subpackage Form
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('JPATH_PLATFORM') or die;
/**
* Класс правила проверки достоверности формы для платформы Joomla!.
* Требует, чтобы вводимое значение было одним из вариантов выбора в поле type="list"
*
* @package Joomla.Platform
* @subpackage Form
* @since 11.1
*/

class JFormRuleOptions extends JFormRule
{
/**
* Метод для проверки достоверности значения.
*
* @param SimpleXMLElement $element Объект типа JXMLElemen, представляющий дескриптор для разметки поля в форме.
* @param mixed $value Проверка формы
* @param string $group Проверяемое значение в поле формы. Значение, определяющее групповое имя поля
* Служит в качестве массива, содержащего поле. Так, если имя поля определяется атрибутом name="foo",
* а групповое значение равно "bar", то поле будет иметь полное имя "bar[foo]'
* @param JRegistry $input Дополнительный объект JRegistry с полным набором данных для проверки достоверности во всей форме в целом.
* @param JForm $form Объект формы, в которой поле проверяется на достоверность введенных данных.
*
* @return boolean Истинно, если значение достоверно, а иначе — ложно.
*
* @since 11.1
*/
public function test(SimpleXMLElement $element, $value, $group = null, JRegistry $input = null, JForm $form = null)
{
// Проверить каждое значение и возвратить логическое значение
foreach ($element->option as $option)
{
if ($value == (string) $option->attributes()->value)
{
return true;
}
}
return false;
}
}

Приведенный выше исходный код из файла options.php довольно прост. Как и прежде, объявляемый класс JFormRuleOptions расширяет класс JFormRule и имеет единственный метод test (). Переменная $element содержит элемент field, тогда как переменная $ value — введенное пользователем значение.

При вычислении выражения $element->option в теле метода test () возвращается массив объектов типа JXMLElement — по одному на каждый элемент option из элемента разметки field. Далее введенное пользователем значение (переменной $value) проверяется в цикле на совпадение с одним из всех имеющихся вариантов выбора (значением атрибута value в элементе разметки option). И как только совпадение будет обнаружено, произойдет немедленный возврат логического значения true из цикла. Если же введенное значение не совпадет ни с одним из значений в массиве, определяющих имеющиеся варианты выбора, из метода test {) будет возвращено логическое значение false.

Для опробования рассматриваемой здесь проверки достоверности измените форму (в частности, средствами Firebug), введя в ней недействительное значение параметра упорядочения статей (article_ordering; например, значение "ххх" вместо значения "а. title" атрибута default). При последующей попытке сохранить форму вы должны получить сообщение об ошибке "Invalid Field: Article Ordering" (Недействительное поле: упорядочение статей). А если вы удалите атрибут validate="options" из XML-файла данного модуля и сделаете еще одну попытку, форма будет сохранена.

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


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости