Стандарты кодирования на PHP

Запись опубликована (Программирование) от ingvar в 27-08-2008 23:26

Хорошая подборка по разным стандартам кодирования в PHP.

  1. PEAR Coding Standards
  2. Zend Framework Coding Standard
  3. Symfony Coding Standards
  4. Cake PHP Coding Standards
  5. DB Medialab PHP Coding Standard
  6. Стандарты оформления кода PHP (производная предыдущего пункта)
  7. PHP Coding Guidelines
  8. GForge: PHP Coding Standards

Источник:
Стандарты кодирования

Триггеры в MySQL

Запись опубликована (MySQL) от ingvar в 27-08-2008 23:08

Поддержка триггеров появилась в MySQL 5.0.2. Триггер - это аналог процедуры, который ассоциируется с конкретной таблицей и запускается при наступлении определенных событий связанных с этой самой таблицей. Событий для таблиц всего несколько: INSERT, DELETE, UPDATE.

Пример триггера INSERT для таблицы News - записываем в поле `created_at` дату и время создания записи. Конечно можно было воспользоваться TIMESTAMP, но в данном случае это сделано в качестве простого примера:
Читать дальше

sfPropelPagerI18n: расширяем sfPropelPager для поддержки i18n

Запись опубликована (Symfony) от ingvar в 24-08-2008 02:26

sfPropelPager - это встроенная в Propel функциональность, которая позволяет организовать Пейджинг (Propel Pager), т.е. разбивку на страницы. Работает великолепно, ознакомиться подробнее можно в статье How to paginate a list. Описанные ниже действия проводились на Propel 1.3.

Принцип работы простой, сначала делается запрос на определение количества записей, а далее получаем данные с учетом количества их на странице. Например, имеем Propel ORM объекты News и NewsI18n.
Читать дальше

MySQL: cравнение даты (datetime) через оператор BETWEEN

Запись опубликована (MySQL) от ingvar в 23-08-2008 20:29

Оператор BETWEEN идеально подходит для сравнения диапазона между датами (datetime). Но тут есть подводные камни. Например, есть задача - выбрать данные из таблицы за некоторый промежуток времени (с ‘2008-08-14′ по ‘2008-08-23′).

Рекомендации:
1. Выполняя любые сравнения, приводить все данные к одному типу.
2. Если один операнд имеет значение типа TIMESTAMP или DATETIME, а другой является константой, операнды сравниваются как значения типа TIMESTAMP. А это значит, что если была строка в виде ‘2008-08-14′, то она автоматически преобразуется в TIMESTAMP ‘2008-08-14 00:00:00′ и это влияет на результат запроса.
3. Над данными, которые участвуют в условиях сравнения желательно не делать никаких операций - это позволяет для них использовать индексы, иначе они игнорируются.

Читать дальше

Обзор Propel Behaviors в Symfony на примере плагина sfPropelActAsTaggableBehaviorPlugin

Запись опубликована (Symfony) от ingvar в 22-08-2008 23:31

В Symfony для Propel есть такая замечательная функциональность как Behaviors. Благодаря Behavior можно расширять существующие модели без необходимости изменять код самой модели. Фактически получает имитация “множественного” наследования. Зачем это надо? К примеру есть вот такой интересный плагин sfPropelActAsTaggableBehaviorPlugin - задумка прекрасная, сделать возможность добавлять теги для любых моделей. Чтобы активировать Behaviors нужно в propel.ini включить их.
Читать дальше

Объявление типов столбцов (enum, datetime, tinytext, year) для MySQL, которые явно не поддерживаются в Propel 1.3

Запись опубликована (Symfony) от ingvar в 17-08-2008 22:06

В документации Propel можно увидеть таблицы соответствия между ним и типами столбцов MySQL (Propel Column Types). Проблема в том, что не все типы столбцов можно явно указать.
Если попытаться указать поле типа ENUM, то при генерировании SQL получим ошибку:


Cannot map unknown Propel type 'ENUM' ...
Cannot map unknown Propel type 'ENUM' to native database type ..

Похожая ситуация наблюдается и в следующем примере. Например, если в схеме указать нижеследующее, то получим ошибку на счет поля created_at ( Cannot map unknown Propel type ‘DATETIME’ to native database type ):


my_product_i18n:
_attributes: { phpName: ProductI18n }
id:          { type: integer, required: true, primaryKey: true, foreignTable: my_product, foreignReference: id }
culture:     { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true }
name:        { type: varchar, size: 50 }
created_at:  { type: datetime }

Читать дальше

Третье обновление в системе плагинов Symfony

Запись опубликована (Symfony) от Igor в 16-08-2008 23:42

С каждым днем система плагинов становится все лучше. Благодаря отличной обратной связи комьюнити, в течении недели были внесены следующие изменения:

• К плагину можно загрузить рисунок, который выводиться во вкладке “Plugin Information” и используется в RSS.
• Чтобы присоединиться к команде разработчиков плагина теперь нужно указать причину. Ранее это не требовалось. На основании этой информации руководитель плагина может принять или отклонить запрос.
• С главной страницы можно просмотреть плагины по категориям или перейти на список всех плагинов.
• Появилась вкладка “Изменений” (Changelog). Информация добавляется из файла package.xml. В FAQ можно ознакомиться как все это работает.
• Обновили RSS с целью отображение более подробной информации.
• Каждый пользователь представлен через систему gravatar.

Оригинал поста: The plugin system gets better

Symfony и Propel 1.3: реализация своих joins в методах doSelect*

Запись опубликована (Symfony) от Igor в 13-08-2008 01:12

Это решение проблемы для Symfony 1.1 и Propel 1.3, когда нужно из двух таблиц объединенных черех join получить все данные. Т.е. хотим выполнить такой запрос


SELECT news.NEWS_ID, news.CATEGORY_ID, news.TITLE, news.BODY, news.CREATED_AT,
    news_category.CATEGORY_ID, news_category.NAME
FROM `news`
LEFT JOIN news_category ON (news.CATEGORY_ID=news_category.CATEGORY_ID)

А вот с этим проблема, если таблицы не связаны через внешний ключ (foreign key), вывести данные из второй таблицы news_category проблематично, но возможно. В основе материал: Applying custom joins in doSelect* method. Но для новой версии материал не соответствует действительности. Чтобы все заработало, следует сделать следущее.

Читать дальше

Проблема при использовании sfWidgetFormPropelSelect от плагина sfPropelPlugin

Запись опубликована (Symfony) от Igor в 11-08-2008 15:47

sfPropelPlugin это плагин для работы с Propel 1.3. Текущая версия 1.3.0 stable от 28/05/2008. Наткнулся на проблему при использовании виджета sfWidgetFormPropelSelect. Если указать порядок сортировки, то получаем ошибку на экран.

Читать дальше

Стандарты кодирования Symfony

Запись опубликована (Symfony) от Igor в 10-08-2008 12:41

Использую Symfony, я перешел на стандарт кодирования от Symfony, что позволяет писать плагины и работать в едином стиле.
Читать дальше