Doctrine 1.2 и Symfony 1.4 советы

Standard

Чтобы вставить несколько записей за раз, сделайте такую штуку:

но на всякий пожарный коллега здесь реализовал это через наследование Doctrine_Query. Возможно его реализация быстрее.
Как делать миграции:

  1. Измените schema.yml
  2. Запустите ./symfony doc:generate-migrations-diff
  3. ./symfony doc:migrate
  4. ./symfony doc:build —all-classes

Как предотвратить удаление записи в doctrine:

public function preDelete(Doctrine_Event $event){
$event->skipOperation();
}

Либо назначить свой Listener чтобы предотвратить удаление:

$userTable = Doctrine_Core::getTable('User');
$userTable->addRecordListener(new HydrationListener());

Вышел php 5.5 alpha 3

Standard

Раз уж я начал освещать каждый новый выход php 5.5, тогда продолжу.

Итак предыдущие обзоры:

В третей альфе, сделаны следующие изменения (нововведения):

  1. Добавлен метод Generator::throw()
  2. Новые cURL функции и опции, например: curl_escape(), curl_multi_setopt(), curl_multi_strerror(), curl_pause(), curl_reset()
  3. Поддержка атрибута Max-Age в setcookie функции
  4. Исправлено пару багов в mysqlnd и ядре

Весь список изменений здесь. Я очень часто использую curl, поэтому добавление новых функций в расширение только приветствую, жду не дождусь set, get операций над cookies.

Книги по javascript и jQuery

Standard

Продолжаю серию статей по книжной тематике, книги для других языков:

JavaScript: The Definitive Guide

Javascript the definitive guide

Это моя первая книга по JavaScript, описывает все с нуля, вполне простым языком. Как правило все начинают именно с нее. Написано очень подробно, даже очень — сначала описывается сам язык, потом его взаимодействие с бразуером, затем полный справочник по языку и api браузера. Замечу, что у Ильи Кантора — создателя сайта javascript.ru есть курсы для новичков, года два назад я записался на начальный курс и он был практически идентичен, тому что вы найдете в этой книге (хотя Илья иногда отмечал особенности браузеров — чего в книге нет, UPDATE: начал перечитывать и понял, что ошибся — особенности браузеров тоже описаны) , впрочем строение курса скорей всего поменялось. Сейчас на английском есть 6-ое (!) издание книги, я заказал себе одну с амазона, так что кому надо могу отдать 5-ое издание на русском совершенно бесплатно (правда там много пометок карандашом). Если вы новичок — это пожалуй, самая лучшая книга для старта.

JavaScript & jQuery: The Missing Manual

JavaScript & jQuery: The Missing Manual

Книга написана очень ясно и понятно, минимум теории — максимум практики. Большая часть отведена под jQuery, есть раздел посвященный фишкам, например как сделать галлерею фотографий, с их предзагрузкой (так вконтакте, кстати делает). Если посмотрите на рейтинг книг по javascript на amazon — missing manual идет практически вровень с definitive guide, так что если вы начнете с этой книги ничего не потеряете.

JavaScript: The Good Parts

JavaScript The Good Parts

Из предисловия: «Большинство языков программирования содержат хорошие и плохие части, но JavaScript имеет больше плохих, будучи разработанным и выпущенным в спешке перед тем как эти части могли быть пересмотрены».  Несмотря на то, что книга о хороших особенностях языка, всё плохое здесь описано и даются соответствующие рекомендации как это обходить. Много внимания уделено особенностям наследования и его отличиям от обычной ООП парадигмы. Подойдет для программиста среднего уровня. Написана Дугласом Крокфордом — человеком, к-ый популяризировал json и создал замечательный инструмент JSLint. Да и что касается объема страниц вот вам сравнение с первой книгой :)

 

Регистрация facebook приложения

unnamed
Standard

Казалось бы, что такого сложного в регистрации приложения  :), но мне «повезло» так как мой сотовый оператор — МТС.

Страница создания приложения здесь, facebook необходим ваш телефон, его можно добавить на странице мобильных настроек, на ней можно получить код, к-ый надо отправить на определенный номер, но у МТС есть неприятная особенность — весь трафик из фейсбука (возможно от других соц. сетей тоже) блокируется, получается что смс с ответным кодом не придет. Решение — подключить услугу МТС Онлайн, все это дело стоит 1.5 руб в день, правда нам ведь никто не мешает подключить и сразу отключить :)

Вышел php 5.5 alpha 2

Standard

Вышла 2 альфа версия PHP 5.5. Качаем с этой страницы.

Из нового:

  1. Функция empty() теперь поддерживает выражения и вызов функции как аргументы.
    До этого момента был возможен вызов empty($somevar), но нельзя было сделать empty(some_function())
  2. Оптимизирован доступ к временным и скомпилированным VM переменным. На 8% меньше обращений к памяти.
  3. MySQL расширение теперь бросает E_DEPRECATED ошибку, вместо него используйте MySQLi, PDO или Mysqlnd
  4. Оптимизация VM стека

Все это не может не радовать, пхп становится лаконичней и быстрее.

Doctrine Collection против array_chunk

Standard

Столкнулся с такой задачей: необходимо разбить коллекцию объектов (Doctrine) на части. Изначально подумывал использовать array_chunk, но ему на вход нужно подать массив, ок — doctrine поддерживает метод ->toArray(), но проблема в том, что toArray() превращает и коллекцию и объекты, которые в ней содержатся в массив. Можно было бы поизвращаться с Doctrine Pager, но решение уже существовало — метод getData(), к-ый надо выполнить над коллекцией. В итоге получаем массив содержащий объекты.

Пара ошибок в проектах symfony

Standard

Ошибка #1: The «…» route has some missing mandatory parameters (:Array)’

Описание: вознакает тк doctrine collection route, к-ый используется в генераторе админки необходимо ссылаться на определенный первичный ключ. В связи many-to-many мы имеем композицию 2 первичных ключей, поэтому у нас появляется массив столбцов вместо одного из них.

Решение: Модифицируйте routing.yml  (‘column: Array’ замените на ‘column: id’)

Ошибка #2: sfConfig::get(‘app_ …’) не работает в task`ах

Описание: при выполнении таска  не был указан параметр  —application=frontend

Решение: используйте параметр в cli, либо поставьте значение по умолчанию:

Вышел php 5.5 alpha 1

Standard

Вот это новость! Наконец-то, вышла php 5.5 alpha 1 (update: уже доступна php 5.5 alpha 3,), из нового:

Новый способ хеширования паролей

Обсуждение

Ссылка на документацию

Поддержка finally в try/catch блоках

Обсуждение
Для меня самое удивительное было узнать, что finally исполнится, даже если в catch блоке выполнится return (либо break, либо continue).

try {
return 2;
} finally {
echo "Это будет вызванно\n";
} //Эхо никогда не выполнится
echo "Вы меня не увидите";

Поддержка генераторов (привет python :))

Обсуждение

Разыменование в массивах / строках

Обсуждение

echo array(1, 2, 3)[0]; //выведет 1
echo "foobar"[2]; //выведет o
echo "foobar"["foo"][0] //выведет f
echo [1,3,4][2]; //выведет 4

Улучшения в intl расширении

Очень много нововведений, см. полный список

Новый способ хеширования паролей

Обсуждение новвоведения

Поддержка list() в foreach цикле

Обсуждение новвоведения.
Что можно будет делать:

$users = [ ['Павел', 'Дуров'], ['Андрей', 'Рогозов']];
// До новвоведения
foreach($users as $user){
list($firstName, $lastName) = $user;
echo "$firstName по фамилии $lastName участвовал в разработке ВКонтакте";
}
// После новвоведения
foreach($users as list($firstName, $lastName)){
echo "$firstName по фамилии $lastName участвовал в разработке ВКонтакте";
}

С помощью этой фичи избавляемся от лишних переменный — в примере выше — это $user. Не скажу, что это часто требуется, но на мой взгляд писать на пхп становится более лаконичней, хотя python синтаксис в этом плане намного ясней и понятнее.

Баг в отображении pdf в iframe

Standard

Делал приложение в ВКонтакте, его суть в том, что открывается дополнительный iframe и в нем пользователю, показывается pdf. Так вот, при скроллинге iframe`a в нижней части,  футер контакта налазил на само приложение (в Chrome), пока пользователь не заскроллит главное окно. Решение — вместо iframeиспользовать

<object src="" type="application/pdf"> </object> 

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

До скроллинга

До скроллинга

После скроллинга

После скроллинга

Ozon Api краткая документация

Standard

Как то пришлось работать с OZON Api, выкладываю их доступные методы. Рассказывать особо нечего — из названия функций и переменных итак понятно, как все работает. <POST> — означает послать POST запрос на адрес их api сервера.

  1. ItemGet(article)
  2. ItemListGet(filterName, filterArticle, filterMinQty, filterMaxQty, filterMinPrice, filterMaxPrice, filterMinPictureCount, filterMaxPictureCount, filterStatus, filterItemTypeID, itemsOnPage, pageNumber, sortTag)
  3. <POST> ItemAdd(article, descript, itemAvailabilityId, itemTypeId, name, price, qty)
  4. <POST> ItemStatusModify(article, statusId)
  5. OrderGet(orderNumber)
  6. OrderListGet(orderNumber, stateId, minOrderSum, maxOrderSum, deliveryVariantId, paymentTypeId, minOrderDate, maxOrderDate, clientId, pageNumber, ordersOnPage, sortTag)
  7. RevokeTypesGet()
  8. <POST> ItemModify(article, descript, itemAvailabilityId, itemTypeId, name, price, qty)
  9. <POST> ItemPicturePackUrlAdd(url)
  10. <POST> ItemPictureRemove(pictureId)
  11. <POST> ItemPictureUrlAdd(article, url)
  12. <POST> OrderStatusModify(orderNumber, statusId)

Статусы:

  • 1733000
  • 1735000