- •Оглавление
- •I. Инструментарий
- •II. Шаблоны проектирования
- •1. Простой
- •2. Шаблонная функция
- •3. Метод буферизации
- •III. Фрэймворк Kohana
- •1. Знакомство с Kohana
- •2. Роутинг
- •7. Взаимодействие модели, контроллера и шаблона
- •8. Создание новых классов и подключение сторонних библиотек
- •9. Конфигурирование
- •10. Языковые файлы
- •11. Системные сообщения
- •12. Хелперы
- •Мы можем использовать любые строковые функции php, добавляя к ним класс utf8
- •13. Этапы создания проекта
- •14. Виджеты
- •Сложные запросы
- •17. Модуль orm
- •Т.Е. Если мы вторым параметромне указываем идендификатор, мы добавляем запись, если указываем – мы обновляем строку с указанным идентификатором.
- •Но если мы попытаемся удалить запись, которой не существует, то увидим сообщение об ошибке. Чтобы избавиться от этой ошибки, есть специальный метод, который проверяет, возвращает ли запрос результат.
- •Если метод возвращает true, то происходит удаление записи.
- •Если таблица userimage связана стаблице user связью belongs_to, то таблица user связана с таблицей userimage связью has_many.
- •19. Использование orm в виджетах
- •20. Модуль Auth
- •21. Модуль Image
- •22. Совместное использование модуля Image и js-скриптов, об-рабатывающих изображения.
- •Далее в контроллер добавим функцию для работы с изображениями.
- •В контроллере произведем вставку изображений в папку и запись в таблицу.
- •Чтобы вывести постраничную навигацию, например, на страницу пользователей, нам сперва нужно узнать общее количество пользователей, которое впоследствии нужно передать в параметр total_items.
- •А вот и сам экшн:
- •Как видно из листинга в шаблон мы передали переменную pagination, в которой будет находиться шаблон вывода ссылок на страницы. Осталось только вывести данную переменную в шаблоне.
- •Если в роуте используются параметры controller, action, directory либо id, то их необходимо передавать в класс pagination в метод route_params().
- •24. Операции crud. Разработка системы администрирования.
- •25. Модуль кэширования
- •В kohana также имеется отдельный модуль cache. Для его подключения необходимо раскомментировать нужную строку в файле bootstrap.Php
- •После подключения модуля необходимо скопировать из папки с модулем конфигурационный файл и переместить его в папку config/ в конфигурационном файле cache.Php имеется несколько групп настроек.
- •Каждая группа настроек работает со своим драйвером для кэширования. В зависимости от выбранного типа настроек, закэшированные файлы будут храниться либо в памяти компьютера, либо в других файлах.
- •28. Многоуровневые комментарии. Алгоритм NestedSets. Модуль orm-mptt
- •29. Модальное окно на ajax
- •30. Парсинг
- •31. Отладка
- •32. Профилирование
- •33. Документация kohana, модуль Userguide
- •34. Модуль Codebench
- •36. Другие модули Kohana
- •37. Состояние проекта
- •38. Дополнительное конфигурирование
- •39. Уязвимость Kohana
- •Установка yii
- •2. Структура yii
- •3. Конфигурирование yii, файл config/main.Php
- •4. Маршрутизация
- •7.Подключение шаблонов
- •8. Полезное.
- •9. Модель. Работа с базой данных.
- •11. Валидация
- •1. Определение класса модели
- •2. Определение правил проверки
- •4. Стандартные правила валидации
- •12. Конструктор форм
- •13. Хелперы форм
- •14. Обработка изображений
- •15. Постраничная навигация и cActiveDataProvider
- •16. Виджеты
- •17. Создание виджета круговой диограммы
- •18. Виджет cMenu
- •19. Хлебные крошки. Виджет cBreadcrumbs
- •20. Виджет cDetailView
- •21. Виджет chml, хелперы html
- •22. Виджет cListView
- •23. Виджет cGridView, таблица администратора
- •25. Модули
- •26. Авторизация
- •27. Контроль доступа на основе ролей
- •V. Краткий обзор и сравнение фрэймворков yii и Kohana
- •VI. Система контроля версий
- •Синхронизация локальных файлов с репозиторием
- •Открытие проекта Mercurial в среде ide
- •Получение файлов из репозитория
- •Импорт файлов в репозиторий
- •Изменение файлов исходного кода
- •Просмотр изменений в редакторе исходного кода
- •Просмотр информации о состоянии файла
- •Метки и условные цвета
- •Ярлыки состояния файлов
- •Окно контроля версий
- •Сравнение редакций файлов
- •Внесение изменений в локальную рабочую копию
- •Переходы между различиями в сравниваемых файлах
- •Изменение критериев просмотра
- •Слияние редакций файлов
- •Фиксация исходных файлов в репозитории
- •Обновление локальных копий
- •Выполнение фиксации
- •Обновление проблем
- •Выгрузка локальных изменений в общий репозиторий
- •Клонирование репозитория Git из GitHub с использованием протокола ssh
- •VI. Обзор рынка
- •VII. Программа курса php для продвинутых
- •Обзор рынка.
- •Php для продвинутых
11. Валидация
Прежде чем создать HTML код формы, нам необходимо определить, какие данные мы будем получать от пользователей и каким правилам они должны соответствовать. Для фиксации этой информации можно использовать класс модели данных.
В зависимости от того, каким образом используются введённые данные, мы можем использовать два типа моделей. Если мы получаем данные, обрабатываем их, а затем удаляем, то используем модель формы; если же после получения и обработки данных мы сохраняем их в базе данных, то используем Active Record. Оба типа моделей данных используют один и тот же базовый класс CModel, который определяет общий интерфейс, используемый формами.
Далее в примере будет использована модель формы. Тем не менее, аналогичные действия применимы к моделям Active Record.
1. Определение класса модели
Ниже мы создадим класс модели LoginForm, который будет использоваться для получения данных, вводимых пользователем на странице аутентификации. Поскольку эти данные используются исключительно в целях аутентификации пользователя и сохранять их не требуется, то создадим модель LoginForm как модель формы.
-
Определение класса модели. Листинг 11.1
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;
}
2. Определение правил проверки
В момент, когда пользователь отправляет данные формы, а модель их получает, нам необходимо удостовериться, что эти данные корректны, прежде чем мы будем их использовать. Это осуществляется посредством проверки данных в соответствии с набором правил. Правила проверки задаются в методе rules(), который возвращает массив сконфигурированных правил.
-
Определение правил проверки. Листинг 11.2
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;
private $_identity;
public function rules()
{
return array(
array('username, password', 'required'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'),
);
}
public function authenticate($attribute,$params)
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','Неправильное имя пользователя или пароль.');
}
}
В коде, представленном выше, username и password — обязательные для заполнения поля, поле password должно быть проверено также на соответствие указанному имени пользователя. Поле rememberMe может принимать значения true или false.
Каждое правило, возвращаемое rules(), должно быть задано в следующем формате:
-
Формат для правил rules(). Листинг 11.3
array('AttributeList', 'Validator', 'on'=>'ScenarioList', …дополнительные параметры)
где AttributeList — строка, содержащая разделённые запятыми имена атрибутов, которые должны быть проверены в соответствии с правилами; Validator указывает на тип используемой проверки; параметр on — необязательный параметр, определяющий список сценариев, в которых должно использоваться правило; дополнительные параметры — это пары имя-значение, которые используются для инициализации значений свойств соответствующих валидаторов.
Начиная с версии 1.1.11 можно исключать отдельные правила. Если вы не хотите проводить валидацию для какого-либо правила и сценария, можно указать параметр except с указанием имени сценария. Синтаксис точно такой же, как и для параметра on.
Список сценариев (в параметрах on и except) может быть указан двумя эквивалентными способами:
-
Два способа вызова списка сценариев. Листинг 11.4
array(
'список полей модели',
'валидатор',
'on'=>array('update', 'create'), // в виде массива имён сценариев
'except'=>'ignore, this, scenarios, at-all', // строкой с именами, разделённой запятыми (пробелы не учитываются)
'message'=>'сообщение об ошибке',
…параметры валидации…
);
список полей модели: поля модели для валидации, разделённые запятыми;
валидатор: определяет, какой валидатор использовать;
on: определяет сценарий, для которого производится валидация. При указании нескольких сценариев, они разделяются запятыми. Если параметр не задан, правило применяется для всех сценариев;
except: определяет сценарий, при котором указанное правило валидации игнорируется. При указании нескольких сценариев, они разделяются запятыми.
message: сообщение, выдающееся при ошибке валидации;
…параметры валидации…: один или несколько дополнительных параметров, передающихся указанному валидатору.
