CActiveForm
| Пакет | system.web.widgets |
|---|---|
| Наследование | class CActiveForm » CWidget » CBaseController » CComponent |
| Подклассы | CCodeForm |
| С момента | 1.1.1 |
| Исходный код | framework/web/widgets/CActiveForm.php |
Вызов методов 'beginWidget' и 'endWidget' виджета CActiveForm рендерит открывающий и закрывающий теги формы. Большинство других методов CActiveForm являются обёртками соответствующих методов 'active' в CHtml. Вызов этих методов между 'beginWidget' и 'endWidget' рендерит метки, поля ввода и т. д. Например, вызов CActiveForm::textField сгенерирует поле ввода для указанного атрибута модели.
То, что делает CActiveForm чрезвычайно полезным, — это поддержка проверки данных. CActiveForm поддерживает проверку данных на трёх уровнях:
- Проверка на стороне сервера: проверка выполняется на стороне сервера после отправки всей страницы с формой. Если есть ошибка проверки, CActiveForm отобразит ошибку на странице для пользователя.
- Проверка на основе AJAX: когда пользователь вводит данные в поле ввода, запускается запрос AJAX, который требует проверки на стороне сервера. Результат проверки отправляется обратно в ответ AJAX, и поле ввода соответствующим образом изменяет свой вид.
- Проверка на стороне клиента (доступна начиная с версии 1.1.7): когда пользователь вводит данные в поле ввода, проверка выполняется на стороне клиента с помощью JavaScript. Обращения к серверу не происходит, что уменьшает нагрузку на сервер.
Все эти проверки используют один и тот же набор правил проверки, объявленных в связанном классе модели. CActiveForm разработан таким образом, что все эти проверки приведут к одинаковым изменениям пользовательского интерфейса и содержанию сообщений об ошибках.
Для обеспечения достоверности данных всегда выполняется проверка на стороне сервера. Установив enableAjaxValidation в значение true, можно включить проверку на основе AJAX; а установив enableClientValidation в значение true, можно включить проверку на стороне клиента. Обратите внимание, что для работы последних двух проверок браузер пользователя должен иметь включён JavaScript. В противном случае будет выполняться только проверка на стороне сервера.
Проверки на основе AJAX и на стороне клиента могут использоваться вместе или по отдельности. Например, в форме регистрации пользователя можно использовать проверку на основе AJAX для проверки уникальности выбранного имени пользователя и проверку на стороне клиента для обеспечения ввода данных во все необходимые поля. Поскольку проверка на основе AJAX может увеличивать нагрузку на сервер, по возможности следует преимущественно использовать проверку на стороне клиента.
Проверка на основе AJAX имеет некоторые ограничения. Во-первых, она не работает с полями загрузки файлов. Во-вторых, её не следует использовать для выполнения проверок, которые могут вызвать изменения состояния на стороне сервера. В-третьих, она не предназначена для работы с табличными данными ввода на данный момент.
Поддержка проверки на стороне клиента варьируется для разных валидаторов. Валидатор будет поддерживать проверку на стороне клиента только в том случае, если он реализует CValidator::clientValidateAttribute и имеет свойство CValidator::enableClientValidation установлено в значение true. В настоящее время следующие валидаторы ядра поддерживают проверку на стороне клиента:
- CBooleanValidator
- CCaptchaValidator
- CCompareValidator
- CEmailValidator
- CNumberValidator
- CRangeValidator
- CRegularExpressionValidator
- CRequiredValidator
- CStringValidator
- CUrlValidator
CActiveForm полагается на CSS для настройки внешнего вида полей ввода, которые находятся в различных состояниях проверки. В частности, каждое поле ввода может находиться в одном из четырёх состояний: начальное (не проверенное), проверка, ошибка и успех. Для различения этих состояний CActiveForm автоматически назначает различные CSS-классы для последних трёх состояний HTML-элементу, содержащему поле ввода. По умолчанию эти CSS-классы называются 'validating', 'error' и 'success' соответственно. Мы можем настроить эти CSS-классы, настроив свойство clientOptions или указав их в методе error.
Ниже приведён пример кода представления, показывающий, как использовать CActiveForm:
<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'focus'=>array($model,'firstName'),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'firstName'); ?>
<?php echo $form->textField($model,'firstName'); ?>
<?php echo $form->error($model,'firstName'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'lastName'); ?>
<?php echo $form->textField($model,'lastName'); ?>
<?php echo $form->error($model,'lastName'); ?>
</div>
<?php $this->endWidget(); ?>
Для ответа на запросы AJAX-валидации нам нужен следующий код класса:
public function actionCreate()
{
$model=new User;
$this->performAjaxValidation($model);
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
$this->redirect('index');
}
$this->render('create',array('model'=>$model));
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
В приведенном выше коде, если мы не включили AJAX-валидацию, мы можем удалить метод
performAjaxValidation и его вызов.Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| action | смешанный | URL действия формы (см. CHtml::normalizeUrl для подробностей об этом параметре). | CActiveForm |
| actionPrefix | строка | Префикс к идентификаторам действий. | CWidget |
| clientOptions | массив | Параметры, передаваемые в плагин валидации javascript. | CActiveForm |
| controller | CController | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| enableAjaxValidation | булево | Включает проверку данных через AJAX. | CActiveForm |
| enableClientValidation | булево | Включает проверку данных на стороне клиента. | CActiveForm |
| errorMessageCssClass | строка | Имя CSS-класса для сообщений об ошибках. | CActiveForm |
| focus | смешанный | Элемент формы, который получит фокус при загрузке страницы. | CActiveForm |
| htmlOptions | массив | Дополнительные атрибуты HTML, которые должны быть рендерированы для тега формы. | CActiveForm |
| id | строка | Возвращает идентификатор виджета или генерирует новый, если это необходимо. | CWidget |
| method | строка | Метод отправки формы. | CActiveForm |
| owner | CBaseController | Возвращает владельца/создателя этого виджета. | CWidget |
| skin | смешанный | Имя скина, используемого этим виджетом. | CWidget |
| stateful | булево | Указывает, нужно ли создавать состянную форму (См. CHtml::statefulForm). | CActiveForm |
| viewPath | строка | Возвращает каталог, содержащий файлы представления для этого виджета. | CWidget |
Защищённые свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| attributes | массив | параметры javascript для атрибутов модели (ID ввода => параметры) | CActiveForm |
| summaryID | строка | Идентификатор контейнера для сводки ошибок | CActiveForm |
Общественные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CWidget |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| actions() | Возвращает список действий, используемых этим виджетом. | CWidget |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| beginCache() | Начинает кэширование фрагмента. | CBaseController |
| beginClip() | Начинает запись клипа. | CBaseController |
| beginContent() | Начинает отображение содержимого, которое будет оформлено заданным представлением. | CBaseController |
| beginWidget() | Создаёт виджет и выполняет его. | CBaseController |
| canGetProperty() | Определяет, можно ли считать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| checkBox() | Отображает флажок для атрибута модели. | CActiveForm |
| checkBoxList() | Отображает список флажков для атрибута модели. | CActiveForm |
| colorField() | Отображает поле выбора цвета для атрибута модели. | CActiveForm |
| createWidget() | Создаёт виджет и инициализирует его. | CBaseController |
| dateField() | Отображает поле даты для атрибута модели. | CActiveForm |
| dateTimeField() | Отображает поле даты и времени для атрибута модели. | CActiveForm |
| dateTimeLocalField() | Отображает поле локальной даты и времени для атрибута модели. | CActiveForm |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикреплённое поведение. | CComponent |
| disableBehaviors() | Отключает все прикрепленные поведения этого компонента. | CComponent |
| dropDownList() | Отображает раскрывающийся список для атрибута модели. | CActiveForm |
| emailField() | Отображает поле ввода адреса электронной почты для атрибута модели. | CActiveForm |
| enableBehavior() | Включает прикрепленное поведение. | CComponent |
| enableBehaviors() | Включает все прикрепленные поведения. | CComponent |
| endCache() | Завершает кэширование фрагмента. | CBaseController |
| endClip() | Завершает запись клипа. | CBaseController |
| endContent() | Завершает отображение содержимого. | CBaseController |
| endWidget() | Завершает выполнение указанного виджета. | CBaseController |
| error() | Отображает первое сообщение об ошибке валидации для атрибута модели. | CActiveForm |
| errorSummary() | Отображает сводку сообщений об ошибках валидации для одной или нескольких моделей. | CActiveForm |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| fileField() | Отображает поле для файла для атрибута модели. | CActiveForm |
| getController() | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| getId() | Возвращает идентификатор виджета или генерирует новый, если это необходимо. | CWidget |
| getOwner() | Возвращает владельца/создателя этого виджета. | CWidget |
| getViewFile() | Ищет файл сценария представления по имени представления. | CWidget |
| getViewPath() | Возвращает каталог, содержащий файлы представления для этого виджета. | CWidget |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли прикрепленные обработчики для указанного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует виджет. | CActiveForm |
| label() | Отображает HTML-метку для атрибута модели. | CActiveForm |
| labelEx() | Отображает HTML-метку для атрибута модели. | CActiveForm |
| listBox() | Отображает выпадающий список для атрибута модели. | CActiveForm |
| numberField() | Отображает поле ввода числа для атрибута модели. | CActiveForm |
| passwordField() | Отображает поле ввода пароля для атрибута модели. | CActiveForm |
| radioButton() | Отображает радиокнопку для атрибута модели. | CActiveForm |
| radioButtonList() | Отображает список радиокнопок для атрибута модели. | CActiveForm |
| raiseEvent() | Вызывает событие. | CComponent |
| rangeField() | Создаёт поле диапазона для атрибута модели. | CActiveForm |
| render() | Отображает представление. | CWidget |
| renderFile() | Отображает файл представления. | CBaseController |
| renderInternal() | Отображает файл представления. | CBaseController |
| run() | Выполняет виджет. | CActiveForm |
| searchField() | Отображает поле поиска для атрибута модели. | CActiveForm |
| setId() | Устанавливает идентификатор виджета. | CWidget |
| telField() | Отображает поле tel для атрибута модели. | CActiveForm |
| textArea() | Отображает текстовую область для атрибута модели. | CActiveForm |
| textField() | Отображает текстовое поле для атрибута модели. | CActiveForm |
| timeField() | Отображает поле времени для атрибута модели. | CActiveForm |
| urlField() | Отображает поле url для атрибута модели. | CActiveForm |
| validate() | Проверяет одну или несколько моделей и возвращает результаты в формате JSON. | CActiveForm |
| validateTabular() | Проверяет массив экземпляров моделей и возвращает результаты в формате JSON. | CActiveForm |
| weekField() | Отображает поле недели для атрибута модели. | CActiveForm |
| widget() | Создаёт виджет и выполняет его. | CBaseController |
Подробное описание свойств
action свойство
public mixed $action;
URL действия формы (см. CHtml::normalizeUrl для подробностей об этом параметре). Если не задано, используется текущий URL страницы.
attributes свойство (доступно с версии 1.1.7)
protected array $attributes;
опции javascript для атрибутов модели (ID ввода => опции)
См. также
clientOptions свойство
public array $clientOptions;
опции, которые будут переданы в плагин проверки javascript. Поддерживаются следующие опции:
- ajaxVar: строка, имя параметра, указывающего, что запрос является AJAX-запросом. При активации проверки AJAX, параметр с этим именем будет отправлен вместе с другими данными формы на сервер. Значение параметра — ID формы. Серверная сторона может затем определить, кто инициировал AJAX-валидацию и отреагировать соответствующим образом. По умолчанию 'ajax'.
- validationUrl: строка, URL, который выполняет AJAX-валидацию. Если не задано, примет значение action.
- validationDelay: целое число, количество миллисекунд, на которое должна быть отложена AJAX-валидация после изменения ввода. Значение 0 означает, что валидация будет выполнена немедленно при изменении ввода. Значение больше 0 означает, что изменение нескольких вводов может инициировать только одну валидацию, если они произойдут достаточно быстро, что может помочь уменьшить нагрузку на сервер. По умолчанию 200 (0,2 секунды).
- validateOnSubmit: логическое значение, указывает, нужно ли выполнять AJAX-валидацию при отправке формы. Если есть ошибки валидации, отправка формы будет остановлена. По умолчанию false.
- validateOnChange: логическое значение, указывает, нужно ли запускать AJAX-валидацию каждый раз, когда меняется значение ввода. Вы можете отключить это, если это оказывает слишком большое влияние на производительность, так как каждый AJAX-запрос валидации будет отправлять данные всей формы. По умолчанию true.
- validateOnType: логическое значение, указывает, нужно ли запускать AJAX-валидацию каждый раз, когда пользователь нажимает клавишу. Если вы установите это свойство в true, вам следует настроить опцию 'validationDelay', чтобы избежать запуска слишком многих AJAX-валидаций. По умолчанию false.
- hideErrorMessage: логическое значение, указывать, нужно ли скрывать сообщение об ошибке, даже если есть ошибка. По умолчанию false, что означает, что сообщение об ошибке появится всякий раз, когда у ввода есть ошибка.
- inputContainer: строка, селектор jQuery для HTML-элемента, содержащего поле ввода. Во время процесса валидации CActiveForm установит разные CSS-классы для элемента контейнера, чтобы указать изменение состояния. Если не задано, это означает ближайший элемент 'div', содержащий поле ввода.
- errorCssClass: строка, CSS-класс, который будет назначен контейнеру, связанному с вводом, имеющим ошибку AJAX-валидации. По умолчанию 'error'.
- successCssClass: строка, CSS-класс, который будет назначен контейнеру, связанному с вводом, прошедшим AJAX-валидацию без ошибок. По умолчанию 'success'.
- validatingCssClass: строка, CSS-класс, который будет назначен контейнеру, связанному с вводом, который в данный момент проходит AJAX-валидацию. По умолчанию 'validating'.
- errorMessageCssClass: строка, CSS-класс, назначенный сообщениям об ошибках, возвращенным AJAX-валидацией. По умолчанию 'errorMessage'.
- beforeValidate: функция, которая будет вызвана перед выполнением AJAX-валидации, инициированной действием отправки формы (доступна только при validateOnSubmit установлено в true). Ожидаемая сигнатура функции должна быть
beforeValidate(form) {...}, где 'form' — jquery-представление объекта формы. Если возвращаемое значение этой функции НЕ true, валидация будет отменена.
Обратите внимание, что поскольку эта опция относится к js-функции, вам следует обернуть значение с помощью CJavaScriptExpression, чтобы предотвратить его кодирование как строку. Эта опция доступна с версии 1.1.3. - afterValidate: функция, которая будет вызвана после выполнения AJAX-валидации, инициированной действием отправки формы (доступна только при validateOnSubmit установлено в true). Ожидаемая сигнатура функции должна быть
afterValidate(form, data, hasError) {...}, где 'form' — jquery-представление объекта формы; 'data' — JSON-ответ от серверной валидации; 'hasError' — логическое значение, указывающее, есть ли какие-либо ошибки валидации. Если возвращаемое значение этой функции НЕ true, обычная отправка формы будет отменена.
Обратите внимание, что поскольку эта опция относится к js-функции, вам следует обернуть значение с помощью CJavaScriptExpression, чтобы предотвратить его кодирование как строку. Эта опция доступна с версии 1.1.3. - beforeValidateAttribute: функция, которая будет вызвана перед выполнением AJAX-валидации, инициированной изменением ввода одного атрибута. Ожидаемая сигнатура функции должна быть
beforeValidateAttribute(form, attribute) {...}, где 'form' — jquery-представление объекта формы, а 'attribute' относится к js-опциям для триггерного атрибута (см. error). Если возвращаемое значение этой функции НЕ true, валидация будет отменена.
Обратите внимание, что поскольку эта опция относится к js-функции, вам следует обернуть значение с помощью CJavaScriptExpression, чтобы предотвратить его кодирование как строку. Эта опция доступна с версии 1.1.3. - afterValidateAttribute: функция, которая будет вызвана после выполнения AJAX-валидации, инициированной изменением ввода одного атрибута. Ожидаемая сигнатура функции должна быть
afterValidateAttribute(form, attribute, data, hasError) {...}, где 'form' — jquery-представление объекта формы; 'attribute' относится к js-опциям для триггерного атрибута (см. error); 'data' — JSON-ответ от серверной валидации; 'hasError' — логическое значение, указывающее, есть ли какие-либо ошибки валидации.
Обратите внимание, что поскольку эта опция относится к js-функции, вам следует обернуть значение с помощью CJavaScriptExpression, чтобы предотвратить его кодирование как строку. Эта опция доступна с версии 1.1.3.
Некоторые из вышеперечисленных опций могут быть переопределены в отдельных вызовах error(). К ним относятся: validationDelay, validateOnChange, validateOnType, hideErrorMessage, inputContainer, errorCssClass, successCssClass, validatingCssClass, beforeValidateAttribute, afterValidateAttribute.
enableAjaxValidation свойство
public boolean $enableAjaxValidation;
указать, нужно ли включать валидацию данных через AJAX. По умолчанию false. Когда это свойство установлено в true, вам следует отвечать на AJAX-запрос валидации на стороне сервера, как показано ниже:
public function actionCreate()
{
$model=new User;
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
......
}
enableClientValidation свойство (доступно с версии 1.1.7)
public boolean $enableClientValidation;
указать, нужно ли включать проверку данных на стороне клиента. По умолчанию false.
Когда это свойство установлено в true, проверка на стороне клиента будет выполняться валидаторами, которые её поддерживают (см. CValidator::enableClientValidation и CValidator::clientValidateAttribute).
См. также
errorMessageCssClass свойство
public string $errorMessageCssClass;
имя CSS-класса для сообщений об ошибках. Начиная с 1.1.14, по умолчанию 'errorMessage', определённый в CHtml::$errorMessageCss. Отдельный вызов error может переопределить это значение, указав HTML-опцию 'class'.
focus свойство (доступно с версии 1.1.4)
public mixed $focus;
Элемент формы для получения начального фокуса на вводе при загрузке страницы.
По умолчанию равен null, что означает, что ни одно поле ввода не имеет фокуса. Если задано как массив, первый элемент должен быть моделью, а второй — атрибутом. Если задано как строка, можно использовать любой селектор jQuery
Пример — установить фокус на поле ввода при загрузке страницы:
- 'focus'=>array($model,'username') - поле ввода $model->username
- 'focus'=>'#'.CHtml::activeId($model,'username') - поле ввода $model->username
- 'focus'=>'#LoginForm_username' - поле ввода с ID LoginForm_username
- 'focus'=>'input[type="text"]:first' - первое поле ввода типа текст
- 'focus'=>'input:visible:enabled:first' - первое видимое и активное поле ввода
- 'focus'=>'input:text[value=""]:first' - первое пустое поле ввода
htmlOptions свойство
public array $htmlOptions;
дополнительные атрибуты HTML, которые должны быть отображены для тега формы.
method свойство
public string $method;
метод отправки формы. Должен быть либо 'post', либо 'get'. По умолчанию 'post'.
stateful свойство
public boolean $stateful;
должна ли быть сгенерирована состояниевая форма (см. CHtml::statefulForm). По умолчанию false.
summaryID свойство (доступно начиная с v1.1.7)
protected string $summaryID;
ID контейнерного элемента для сводки ошибок
См. также
Подробное описание методов
checkBox() метод
public string checkBox(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные атрибуты HTML. |
| {return} | строка | сгенерированный флажок |
public function checkBox($model,$attribute,$htmlOptions=array())
{
return CHtml::activeCheckBox($model,$attribute,$htmlOptions);
}
Отображает флажок для атрибута модели. Этот метод является оболочкой CHtml::activeCheckBox. Для получения подробной информации о параметрах этого метода, пожалуйста, обратитесь к CHtml::activeCheckBox.
checkBoxList() метод
public string checkBoxList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $data | массив | пары значение-метка, используемые для генерации списка флажков. |
| $htmlOptions | массив | дополнительные параметры HTML. |
| {return} | строка | сгенерированный список флажков |
public function checkBoxList($model,$attribute,$data,$htmlOptions=array())
{
return CHtml::activeCheckBoxList($model,$attribute,$data,$htmlOptions);
}
Отображает список флажков для атрибута модели. Этот метод является обёрткой для CHtml::activeCheckBoxList. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeCheckBoxList.
colorField() метод (доступен начиная с версии v1.1.16)
public string colorField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные HTML-атрибуты. |
| {return} | строка | сгенерированное поле ввода |
public function colorField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeColorField($model,$attribute,$htmlOptions);
}
Отображает поле выбора цвета для атрибута модели. Этот метод является обёрткой для CHtml::activeColorField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeColorField.
dateField() метод (доступен начиная с версии v1.1.11)
public string dateField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные HTML-атрибуты. |
| {return} | строка | сгенерированное поле ввода |
public function dateField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeDateField($model,$attribute,$htmlOptions);
}
Отображает поле даты для атрибута модели. Этот метод является обёрткой для CHtml::activeDateField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeDateField.
dateTimeField() метод (доступен начиная с версии v1.1.16)
public string dateTimeField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные HTML-атрибуты. |
| {return} | строка | сгенерированное поле ввода |
public function dateTimeField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeDateTimeField($model,$attribute,$htmlOptions);
}
Отображает поле даты и времени для атрибута модели. Этот метод является обёрткой для CHtml::activeDateTimeField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeDateTimeField.
dateTimeLocalField() метод (доступен начиная с версии v1.1.16)
public string dateTimeLocalField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные HTML-атрибуты. |
| {return} | строка | сгенерированное поле ввода |
public function dateTimeLocalField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeDateTimeLocalField($model,$attribute,$htmlOptions);
}
Отображает локальное поле даты и времени для атрибута модели. Этот метод является обёрткой для CHtml::activeDateTimeLocalField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeDateTimeLocalField.
dropDownList() метод
public string dropDownList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $data | массив | данные для генерации элементов списка (значение=>отображение) |
| $htmlOptions | массив | дополнительные HTML-атрибуты. |
| {return} | строка | сгенерированный выпадающий список |
public function dropDownList($model,$attribute,$data,$htmlOptions=array())
{
return CHtml::activeDropDownList($model,$attribute,$data,$htmlOptions);
}
Отображает выпадающий список для атрибута модели. Этот метод является обёрткой для CHtml::activeDropDownList. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeDropDownList.
emailField() метод (доступен начиная с версии v1.1.11)
public string emailField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные атрибуты HTML. |
| {return} | строка | сгенерированное поле ввода |
public function emailField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeEmailField($model,$attribute,$htmlOptions);
}
Отображает поле для ввода электронной почты для атрибута модели. Этот метод является оболочкой для CHtml::activeEmailField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeEmailField.
error() метод
public string error(CModel $model, string $attribute, array $htmlOptions=array ( ), boolean $enableAjaxValidation=true, boolean $enableClientValidation=true) | ||
| $model | CModel | модель данных |
| $attribute | строка | имя атрибута |
| $htmlOptions | массив | дополнительные атрибуты HTML, которые будут отображаться в контейнере div. Помимо всех тех опций, доступных в CHtml::error, дополнительно распознаются следующие опции:
Пример:
<div class="form-element">
<?php echo $form->labelEx($model,'attribute'); ?>
<?php echo $form->textField($model,'attribute', array('id'=>'custom-id')); ?>
<?php echo $form->error($model,'attribute',array('inputID'=>'custom-id')); ?>
</div>
При включенной клиентской валидации также распознается опция с именем "clientValidation". Эта опция должна содержать фрагмент JavaScript-кода для выполнения клиентской валидации. В коде заранее определены переменные:
|
| $enableAjaxValidation | boolean | включить AJAX-валидацию для указанного атрибута. Обратите внимание, что для включения AJAX-валидации оба параметра enableAjaxValidation и этот параметр должны быть true. |
| $enableClientValidation | boolean | включить клиентскую валидацию для указанного атрибута. Обратите внимание, что для включения клиентской валидации оба параметра enableClientValidation и этот параметр должны быть true. Этот параметр доступен с версии 1.1.7. |
| {return} | строка | результат валидации (отображение ошибки или сообщение об успехе). |
public function error($model,$attribute,$htmlOptions=array(),$enableAjaxValidation=true,$enableClientValidation=true)
{
if(!$this->enableAjaxValidation)
$enableAjaxValidation=false;
if(!$this->enableClientValidation)
$enableClientValidation=false;
if(!isset($htmlOptions['class']))
$htmlOptions['class']=$this->errorMessageCssClass;
if(!$enableAjaxValidation && !$enableClientValidation)
return CHtml::error($model,$attribute,$htmlOptions);
$id=CHtml::activeId($model,$attribute);
$inputID=isset($htmlOptions['inputID']) ? $htmlOptions['inputID'] : $id;
unset($htmlOptions['inputID']);
if(!isset($htmlOptions['id']))
$htmlOptions['id']=$inputID.'_em_';
$option=array(
'id'=>$id,
'inputID'=>$inputID,
'errorID'=>$htmlOptions['id'],
'model'=>get_class($model),
'name'=>$attribute,
'enableAjaxValidation'=>$enableAjaxValidation,
);
$optionNames=array(
'validationDelay',
'validateOnChange',
'validateOnType',
'hideErrorMessage',
'inputContainer',
'errorCssClass',
'successCssClass',
'validatingCssClass',
'beforeValidateAttribute',
'afterValidateAttribute',
);
foreach($optionNames as $name)
{
if(isset($htmlOptions[$name]))
{
$option[$name]=$htmlOptions[$name];
unset($htmlOptions[$name]);
}
}
if($model instanceof CActiveRecord && !$model->isNewRecord)
$option['status']=1;
if($enableClientValidation)
{
$validators=isset($htmlOptions['clientValidation']) ? array($htmlOptions['clientValidation']) : array();
unset($htmlOptions['clientValidation']);
$attributeName = $attribute;
if(($pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1) // e.g. [a]name
{
$attributeName=substr($attribute,$pos+1);
}
foreach($model->getValidators($attributeName) as $validator)
{
if($validator->enableClientValidation)
{
if(($js=$validator->clientValidateAttribute($model,$attributeName))!='')
$validators[]=$js;
}
}
if($validators!==array())
$option['clientValidation']=new CJavaScriptExpression("function(value, messages, attribute) {\n".implode("\n",$validators)."\n}");
}
if(empty($option['hideErrorMessage']) && empty($this->clientOptions['hideErrorMessage']))
$html=CHtml::error($model,$attribute,$htmlOptions);
else
$html='';
if($html==='')
{
if(isset($htmlOptions['style']))
$htmlOptions['style']=rtrim($htmlOptions['style'],';').';display:none';
else
$htmlOptions['style']='display:none';
$html=CHtml::tag(CHtml::$errorContainerTag,$htmlOptions,'');
}
$this->attributes[$inputID]=$option;
return $html;
}
Отображает первую ошибку валидации для атрибута модели. Это аналогично CHtml::error, за исключением того, что оно регистрирует атрибут модели, так что если его значение изменяется пользователем, может быть инициирована AJAX-валидация.
См. также
errorSummary() метод
public string errorSummary(mixed $models, string $header=NULL, string $footer=NULL, array $htmlOptions=array ( )) | ||
| $models | смешанный тип | модели, ошибки ввода которых необходимо отобразить. Это может быть либо одна модель, либо массив моделей. |
| $header | строка | фрагмент HTML-кода, который отображается перед ошибками |
| $footer | строка | фрагмент HTML-кода, который отображается в конце ошибок |
| $htmlOptions | массив | дополнительные атрибуты HTML, которые будут отображаться в контейнере div. |
| {return} | строка | сводка ошибок. Пустая, если ошибки не найдены. |
public function errorSummary($models,$header=null,$footer=null,$htmlOptions=array())
{
if(!$this->enableAjaxValidation && !$this->enableClientValidation)
return CHtml::errorSummary($models,$header,$footer,$htmlOptions);
if(!isset($htmlOptions['id']))
$htmlOptions['id']=$this->id.'_es_';
$html=CHtml::errorSummary($models,$header,$footer,$htmlOptions);
if($html==='')
{
if($header===null)
$header='<p>'.Yii::t('yii','Please fix the following input errors:').'</p>';
if(!isset($htmlOptions['class']))
$htmlOptions['class']=CHtml::$errorSummaryCss;
$htmlOptions['style']=isset($htmlOptions['style']) ? rtrim($htmlOptions['style'],';').';display:none' : 'display:none';
$html=CHtml::tag('div',$htmlOptions,$header."\n<ul><li>dummy</li></ul>".$footer);
}
$this->summaryID=$htmlOptions['id'];
foreach(is_array($models) ? $models : array($models) as $model)
foreach($model->getSafeAttributeNames() as $attribute)
$this->_summaryAttributes[]=CHtml::activeId($model,$attribute);
return $html;
}
Отображает сводку ошибок валидации для одной или нескольких моделей. Этот метод очень похож на CHtml::errorSummary, за исключением того, что он также работает при выполнении AJAX-валидации.
См. также
fileField() метод
public string fileField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные атрибуты HTML |
| {return} | строка | сгенерированное поле ввода |
public function fileField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeFileField($model,$attribute,$htmlOptions);
}
Отображает поле для ввода файла для атрибута модели. Этот метод является оболочкой для CHtml::activeFileField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeFileField.
hiddenField() метод
public string hiddenField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные атрибуты HTML. |
| {return} | строка | сгенерированное поле ввода |
public function hiddenField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeHiddenField($model,$attribute,$htmlOptions);
}
Отображает скрытое поле для атрибута модели. Этот метод является оболочкой для CHtml::activeHiddenField. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeHiddenField.
init() метод
public void init() |
public function init()
{
if(!isset($this->htmlOptions['id']))
$this->htmlOptions['id']=$this->id;
else
$this->id=$this->htmlOptions['id'];
if($this->stateful)
echo CHtml::statefulForm($this->action, $this->method, $this->htmlOptions);
else
echo CHtml::beginForm($this->action, $this->method, $this->htmlOptions);
if($this->errorMessageCssClass===null)
$this->errorMessageCssClass=CHtml::$errorMessageCss;
}
Инициализирует виджет. Это отображает открывающий тег формы.
label() метод
public string label(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | строка | атрибут |
| $htmlOptions | массив | дополнительные атрибуты HTML. |
| {return} | строка | сгенерированный тег метки |
public function label($model,$attribute,$htmlOptions=array())
{
return CHtml::activeLabel($model,$attribute,$htmlOptions);
}
Отображает HTML-метку для атрибута модели. Этот метод является оболочкой для CHtml::activeLabel. Для получения подробной информации о параметрах этого метода обратитесь к CHtml::activeLabel.
labelEx() метод
public string labelEx(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенеченный тег метки |
public function labelEx($model,$attribute,$htmlOptions=array())
{
return CHtml::activeLabelEx($model,$attribute,$htmlOptions);
}
Отображает HTML-метку для атрибута модели. Этот метод является оберткой для CHtml::activeLabelEx. Пожалуйста, обратитесь к CHtml::activeLabelEx за подробной информацией о параметрах этого метода.
listBox() метод
public string listBox(CModel $model, string $attribute, array $data, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $data | array | данные для генерации списка опций (значение=>отображение) |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированный список |
public function listBox($model,$attribute,$data,$htmlOptions=array())
{
return CHtml::activeListBox($model,$attribute,$data,$htmlOptions);
}
Отображает список для атрибута модели. Этот метод является оберткой для CHtml::activeListBox. Пожалуйста, обратитесь к CHtml::activeListBox за подробной информацией о параметрах этого метода.
numberField() метод (доступен начиная с v1.1.11)
public string numberField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерованное поле ввода |
public function numberField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeNumberField($model,$attribute,$htmlOptions);
}
Отображает поле ввода числа для атрибута модели. Этот метод является оберткой для CHtml::activeNumberField. Пожалуйста, обратитесь к CHtml::activeNumberField за подробной информацией о параметрах этого метода.
passwordField() метод
public string passwordField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерованное поле ввода |
public function passwordField($model,$attribute,$htmlOptions=array())
{
return CHtml::activePasswordField($model,$attribute,$htmlOptions);
}
Отображает поле ввода пароля для атрибута модели. Этот метод является оберткой для CHtml::activePasswordField. Пожалуйста, обратитесь к CHtml::activePasswordField за подробной информацией о параметрах этого метода.
radioButton() метод
public string radioButton(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированная радиокнопка |
public function radioButton($model,$attribute,$htmlOptions=array())
{
return CHtml::activeRadioButton($model,$attribute,$htmlOptions);
}
Отображает радиокнопку для атрибута модели. Этот метод является оберткой для CHtml::activeRadioButton. Пожалуйста, обратитесь к CHtml::activeRadioButton за подробной информацией о параметрах этого метода.
radioButtonList() метод
public string radioButtonList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $data | array | пары «значение-подпись», используемые для генерации списка радиокнопок. |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированный список радиокнопок |
public function radioButtonList($model,$attribute,$data,$htmlOptions=array())
{
return CHtml::activeRadioButtonList($model,$attribute,$data,$htmlOptions);
}
Отображает список радиокнопок для атрибута модели. Этот метод является оберткой для CHtml::activeRadioButtonList. Пожалуйста, обратитесь к CHtml::activeRadioButtonList за подробной информацией о параметрах этого метода.
rangeField() метод (доступен начиная с v1.1.11)
public string rangeField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерованное поле ввода |
public function rangeField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeRangeField($model,$attribute,$htmlOptions);
}
Генерирует поле ввода диапазона для атрибута модели. Этот метод является оберткой для CHtml::activeRangeField. Пожалуйста, обратитесь к CHtml::activeRangeField за подробной информацией о параметрах этого метода.
run() метод
public void run() |
public function run()
{
if(is_array($this->focus))
$this->focus="#".CHtml::activeId($this->focus[0],$this->focus[1]);
echo CHtml::endForm();
$cs=Yii::app()->clientScript;
if(!$this->enableAjaxValidation && !$this->enableClientValidation || empty($this->attributes))
{
if($this->focus!==null)
{
$cs->registerCoreScript('jquery');
$cs->registerScript('CActiveForm#focus',"
if(!window.location.hash)
jQuery('".$this->focus."').focus();
");
}
return;
}
$options=$this->clientOptions;
if(isset($this->clientOptions['validationUrl']) && is_array($this->clientOptions['validationUrl']))
$options['validationUrl']=CHtml::normalizeUrl($this->clientOptions['validationUrl']);
foreach($this->_summaryAttributes as $attribute)
$this->attributes[$attribute]['summary']=true;
$options['attributes']=array_values($this->attributes);
if($this->summaryID!==null)
$options['summaryID']=$this->summaryID;
if($this->focus!==null)
$options['focus']=$this->focus;
if(!empty(CHtml::$errorCss))
$options['errorCss']=CHtml::$errorCss;
$options=CJavaScript::encode($options);
$cs->registerCoreScript('yiiactiveform');
$id=$this->id;
$cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiactiveform($options);");
}
Выполняет виджет. Это регистрирует необходимый JavaScript-код и отображает закрывающий тег формы.
searchField() метод (доступен начиная с v1.1.14)
public string searchField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерованное поле ввода |
public function searchField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeSearchField($model,$attribute,$htmlOptions);
}
Отображает поле поиска для атрибута модели. Этот метод является оберткой для CHtml::activeSearchField. Пожалуйста, обратитесь к CHtml::activeSearchField за подробной информацией о параметрах этого метода.
telField() метод (доступен начиная с v1.1.14)
public string telField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированное поле ввода |
public function telField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeTelField($model,$attribute,$htmlOptions);
}
Отображает поле tel для атрибута модели. Этот метод является обёрткой для CHtml::activeTelField. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeTelField.
textArea() метод
public string textArea(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированная текстовая область |
public function textArea($model,$attribute,$htmlOptions=array())
{
return CHtml::activeTextArea($model,$attribute,$htmlOptions);
}
Отображает текстовую область для атрибута модели. Этот метод является обёрткой для CHtml::activeTextArea. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeTextArea.
textField() метод
public string textField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированное поле ввода |
public function textField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeTextField($model,$attribute,$htmlOptions);
}
Отображает текстовое поле для атрибута модели. Этот метод является обёрткой для CHtml::activeTextField. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeTextField.
timeField() метод (доступен с версии v1.1.14)
public string timeField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированное поле ввода |
public function timeField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeTimeField($model,$attribute,$htmlOptions);
}
Отображает поле времени для атрибута модели. Этот метод является обёрткой для CHtml::activeTimeField. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeTimeField.
urlField() метод (доступен с версии v1.1.11)
public string urlField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированное поле ввода |
public function urlField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeUrlField($model,$attribute,$htmlOptions);
}
Отображает поле URL для атрибута модели. Этот метод является обёрткой для CHtml::activeUrlField. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeUrlField.
validate() метод
public static string validate(mixed $models, array $attributes=NULL, boolean $loadInput=true) | ||
| $models | mixed | один экземпляр модели или массив моделей. |
| $attributes | array | список атрибутов, которые должны быть валидированы. По умолчанию равно null, что означает, что должны быть валидированы все атрибуты, указанные в соответствующих правилах валидации моделей. Если этот параметр задан как список атрибутов, будут валидированы только указанные атрибуты. |
| $loadInput | boolean | загружать ли данные из массива $_POST в этом методе. Если это true, модель будет заполняться из $_POST[ModelClass]. |
| {return} | string | представление сообщений об ошибках валидации в формате JSON. |
public static function validate($models, $attributes=null, $loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($models as $model)
{
$modelName=CHtml::modelName($model);
if($loadInput && isset($_POST[$modelName]))
$model->attributes=$_POST[$modelName];
$model->validate($attributes);
foreach($model->getErrors() as $attribute=>$errors)
$result[CHtml::activeId($model,$attribute)]=$errors;
}
return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
}
Валидирует одну или несколько моделей и возвращает результаты в формате JSON. Это вспомогательный метод, который упрощает написание кода валидации AJAX.
validateTabular() метод
public static string validateTabular(mixed $models, array $attributes=NULL, boolean $loadInput=true) | ||
| $models | mixed | массив экземпляров моделей. |
| $attributes | array | список атрибутов, которые должны быть валидированы. По умолчанию равно null, что означает, что должны быть валидированы все атрибуты, указанные в соответствующих правилах валидации моделей. Если этот параметр задан как список атрибутов, будут валидированы только указанные атрибуты. |
| $loadInput | boolean | загружать ли данные из массива $_POST в этом методе. Если это true, модель будет заполняться из $_POST[ModelClass][$i]. |
| {return} | string | представление сообщений об ошибках валидации в формате JSON. |
public static function validateTabular($models, $attributes=null, $loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($models as $i=>$model)
{
$modelName=CHtml::modelName($model);
if($loadInput && isset($_POST[$modelName][$i]))
$model->attributes=$_POST[$modelName][$i];
$model->validate($attributes);
foreach($model->getErrors() as $attribute=>$errors)
$result[CHtml::activeId($model,'['.$i.']'.$attribute)]=$errors;
}
return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
}
Валидирует массив экземпляров моделей и возвращает результаты в формате JSON. Это вспомогательный метод, который упрощает написание кода AJAX-валидации для табличных данных.
weekField() метод (доступен с версии v1.1.16)
public string weekField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
| $model | CModel | модель данных |
| $attribute | string | атрибут |
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | string | сгенерированное поле ввода |
public function weekField($model,$attribute,$htmlOptions=array())
{
return CHtml::activeWeekField($model,$attribute,$htmlOptions);
}
Отображает поле недели для атрибута модели. Этот метод является обёрткой для CHtml::activeWeekField. Для получения подробной информации о параметрах этого метода, обратитесь к CHtml::activeWeekField.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CActiveForm