Здравствуй, Хабр.
После
анонса своего
проекта на Хабре, группа трудящихся в комментариях изъявила желание узнать более подробно, о технологиях используемых в проекте и тонкостях настроек. Как я писал ранее в проекте используется
Yii фреймворк, о настройках которого и поговорим.
Все что здесь изложено было получено из личного опыта в процессе реализации своего проекта и суммирования информации полученной из официальных и не очень источников. Попытаюсь в данной статье рассказать о самых важных аспектах настройки Yii под высокие нагрузки, начиная от настройки кэша исполняемого кода php и заканчивая выбором инструментария для работы с базой данных.
Доброго времени суток, хабрасообщество!
Проблема
При работе с базой данных или просто с объектами, доступными из разных частей вашего приложения, есть опасность, что объекты, которые, казалось бы, должны быть равны вовсе таковыми не являются.
Например, допустим, у нас есть некоторая модель ActiveRecord — Expence и вот такой код:
$modelOne = Expence::model()->findByPk(10);
$modelTwo = Expence::model()->findByPk(10);
var_dump($modelOne === $modelTwo); // Вернет false
Таким образом, меняя одну модель мы никоим образом не затронем вторую(что логично, так как они ссылаются на разные объекты).
$modelOne->someField = "Data";
$modelOne->save();
/// ...какой-то код...
echo $modelTwo->someField; // Содержит старое значение
$modelTwo->save(); // Затираем ранее записаные данные
Открыта финальная регистрация на первую ежегодную профессиональную конференцию YiiConf.
- Дата проведения конференции: 19 мая
- Стоимость участия: $50, 1500р. или 400 гривен
- Количество мест: 200
- Место проведения: ул. Михайловская, 1/3 (Площадь Независимости) г. Киев, 01001, Украина

Добрый вечер всем хабраюзерам!
Хочу поделиться определёнными идеями и соображениями на тему создания обособленных проектов в Yii на основе одного общего ядра.
Некоторое время назад, перейдя по рабочей надобности с kohana на yii, я долго радовался его простоте и удобству, которые, как мне казалось, были в разы больше, чем у коханы (да простят меня любители этого фреймворка), а потом, все по той же рабочей надобности, пришлось углубиться в архитектуру Yii, и, частности, в возможности дистрибуции его проектов от одного обособленного ядра.
Изначально, что называется, «из коробки», Yii уже поставляется отдельными папками с самим ядром и несколькими демо-проектами на нём, но мне этого было мало, поскольку требовались несколько другие возможности по управлению и контролю за проектами, на основе чего и были созданы те идеи, которые я хочу изложить.
Первая проблема которая у меня встала при работе Yii — отсутствие нормальной каптчи. Дефолтная каптча меня не устроила ряду причин:
- постонянно глючила (просто нажимая F5 иногда она отображалась нормально, иногда отображалась пустая картинка, иногда каринка с одиним первым симоволом);
- сам агоритм мне показался слишком простым (+ используется всего один шрифт);
- не обновлялся код на картинке при перезагрузки страницы.
Прогуглив, я понял, что с подобными проблемами сталкиваюсь не я один. А вариант с рекаптчей тоже «не вариант» — её было невозможно вписать в нужный мне дизайн (либо я просто плохо в ней разобрался).
Т.к. в своих проектах я обычно использую каптчу «KCAPTCHA» (http://captcha.ru/kcaptcha/), то решил совместить существующую каптчу из Yii и «KCAPTCHA». И вот, что у меня, получилось —
glavweb.ru/public/download/kcaptcha.zip
Использование PostgreSQL tsearch2 в проекте на Yii
Любой сайт — это прежде всего тексты. Для того, чтобы тексты было удобно редактировать их часто хранят в БД. При этом появляются дополнительные возможности, такие как удобный поиск по содержимому текстового поля. Старый добрый LIKE хорош, но не всегда. Есть более продвинутые вещи, такие как tsearch2 в PostgreSQL. Как им воспользоваться в Yii Framework я расскажу под катом.
Yii позволяет кешировать данные в виде массива возвращаемые прямиком из базы данных.
А у системы кеширования есть разные зависимости. Вот только ни одна из этих зависимостей не позволяет автоматически отслеживать изменения в таблице без обращения к ней же (имею ввиду CDbCacheDependency), что в нагруженных системах бессмысленно.
Для подобных вещей придумали так называемое тегирование. Т.е. создается какой-то тег, который сохраняется со всеми кешами связанными с данной таблицей. И как только он меняется, все связанные кеши должны перезагрузиться. Как оказалось в Yii это делается очень просто.
Доброго времени суток. Сегодня мне хотелось бы разобрать такую интересную возможность Yii Framework, как валидация данных моделей. На момент написания статьи актуальная версия фреймворка
1.1.10, собственно рассматривать валидацию на ней и будем.
Хочу сразу сказать, что мне не хочется перепечатывать мануалы и API, поэтому я по возможности буду ссылаться на готовые источники. Кроме того, я не буду описывать то, как пользоваться валидаторами. Я постараюсь раскрыть механизм валидации моделей Yii на основе правил валидации, чтобы используя их вы понимали что же на самом деле происходит и где в случае чего можно искать ошибки.
Думаю, редкий человек, следящий за блоком Yii на хабре, не видел
статью об экстеншене для авторизации через социальные сети EAuth. Сегодня я хочу представить в некотором роде продолжение этой темы, а именно модуль для управления пользователями, основанном на вышеупомянутом дополнении.
Привет, хабрасообщество!
В этой теме я хочу обсудить наиболее правильное использование компонента
CGridView в Yii.
Ниже я опишу 3 способа, которые вижу лично я, и буду рад услышать ваши идеи в комментариях.
Итак,
задача:
Требуется страница с несколькими блоками, в одном из которых должна быть таблица (грид).
Нужна возможность сортировки и постраничной навигации грида через ajax.
Звучит несложно, не правда ли? Давайте посмотрим, что нам предлагает Yii.