1
Июл
Apostrophe — наглядная CMS на Symfony
Запостил Jeka, в раздел Новости
Apostrophe — CMS написанная на PHP, Symfony.
В данной CMS нет отдельной страницы для администрирования, все данные редактируются непосредственно в том месте где текст размещается.
Для пробы сделали пару сайтов на Apostrophe. Сама CMS все еще довольно сыроватая, но если ее обработать напильником, получается довольно интересный продукт.
Идеально подходит для небольших сайтов, сайтов визиток.
31
Май
Конференция Symfony Camp UA 2010
Запостил Jeka, в раздел Новости
Приглашаем всех желающих посетить конференцию по Symfony PHP Framework, которая состоится 3 июля 2010 года в г.Киев. Участие в конференции – бесплатное. Зарегистрироваться на мероприятие.
Конференция ориентирована как на профессиональных веб-разработчиков, так и начинающих. Мероприятие будет интересным местом для общения программистов и руководителей интернет-проектов, которые используют или планируют использовать фреймворк Symfony, где можно будет пообщаться, поделиться своим опытом, получить новые знакомства.
Планируемые доклады
• Перевод боевого сайта с ветки 1.0 на ветку 1.4
Руслан Ханов (Россия, Новосибирск)
• Как мы делали langwhich.com и unique-shopper.com?
Денис Пищенко, Дмитрий Одуло (Украина, Харьков)
• Symfony как платформа для open-source проектов (Sympal, Apostrophe, Diem)
Александр Демченко (Украина, Харьков)
• Многоязычные сайты на Symfony. Проблемы и их решения
Игорь Бровченко (Украина, Киев)
• Сontinuous Integration для Symfony
Игорь Бровченко (Украина, Киев)
• LESS, SASS, HAML: 4 буквы, изменившие frontend development
Константин Кудряшов (Белоруссия, Минск)
• Symfony Task – задачи батча (пакетной обработки). Как использовать, как улучшить
Александр Безрученко (Россия, Таганрог)
• Кастомизация генераторов в Symfony 1.3/1.4. Эффективное управление функционалом и структурой плагинов
Николай Зык (Украина, Киев)
• Философия сервисов. Практическое применение в Symfony 1.3/1.4
Николай Зык (Украина, Киев)
• Symfony 2 – перезагрузка?
Александр Демченко (Украина, Харьков)
• Этапы разработки реального проекта на Symfony 2 + Doctrine 2
Александр Скорней (Украина, Киев)
• Внедрение компонента templating в существующий проект
Станислав Сметанин (Россия, Ижевск)
Подробности и новости:
Сайт конференции: symfonycamp.org.ua
Twitter: @SymfonyCampUa
Если Вы находите возможным поддержать нашу конференцию, просим связаться с нами.
5
Май
Doctrine 1.2: сортировка связей
Запостил Jeka, в раздел Новости, Программирование
Чтобы связанные объекты выводились в определенном нами порядке, при описании модели можно указать поле по которому будет вестись сортировка.
Пример:
Image:
columns:
# .... необходимые поля
pos: { type: integer, notnull: true, default: 0} # поле по которому будет вестись сортировка
product_id: {type: integer}
Product:
# .... необходимые поля
relations:
Images:
type: many
class: Image
local: id
foreign: product_id
onDelete: 'SET NULL'
orderBy: 'pos ASC' # <- указываем по какому полю сортировать
Данная заметка касается версии Doctrine 1.2. Как я знаю в более старых версиях, подобное приходилось решать самостоятельно правкой классов в дистрибутиве Doctrine.
28
Апр
Яндекс.Директ API
Запостил Jeka, в раздел Новости, Программирование
Получен на днях доступ к API Яндекс.Директ, сейчас изучаем возможности. Есть большие задачи и планы по его использованию.
Сам доступ предоставляется через SOAP.
27
Апр
Вышла стабильная версия Propel 1.5
Запостил Jeka, в раздел Новости, Программирование

Хорошая новость для разработчиков использующих Propel, вышла стабильная версия Propel 1.5!!!
Кто не знает – это ORM для PHP (http://www.propelorm.org/).
Изменений в данной версии очень много, но как обещают разработчики, не надо этого пугаться, так как остается совместимость с версиями 1.4, 1.3.
Для апгрейда надо всего лишь перегенерировать модель и начать использовать новые возможности Propel.
Что нового, смотрим здесь http://www.propelorm.org/wiki/Documentation/1.5/WhatsNew.
Удачи!
29
Мар
Symfony: Фильтры формы – выпадающий список для текстового поля
Запостил Jeka, в раздел Программирование
Так получилось, что у одной модели имеется текстовое поле с не очень большим количеством вариантов значения. По идее можно сделать по правильному и вывести все в отдельную таблицу, но по некоторым причинам этого не делается.
Следовательно в админке при фильтрации, не очень охота писать значения этого поля ручками, легко можно сделать выпадающий список со всеми вариантами.
Сначала сделал так:
// SomeModelFormFilter.class.php
// ...
public function configure()
{
$this->setWidget('status', new sfWidgetFormChoice(
array('choices'=>self::getStatuses())
));
$this->setValidator('status', new sfValidatorChoice(array(
'choices'=>array_keys(self::getStatuses()),
'required'=>false
)));
}
public static function getStatuses()
{
return array(
'' => '',
'one'=>'Один',
'two'=>'Два',
'three'=>'Три'
);
}
//...
Оказалось, что хоть выпадающий список появляется, фильтрация не происходит.
Немного покопавшись, нашел такое решение: надо для нашего поля status, указать тип «ForeignKey».
Делаем это перекрываем родительский метод «getFields()».
// SomeModelFormFilter.class.php
// ...
public function getFields()
{
$fields = parent::getFields();
$fields['status']='ForeignKey';
return $fields;
}
// ...
Все, теперь работает.
17
Фев
phpBB 4.0 & Symfony 2.0
Запостил Jeka, в раздел Новости
Отличная новость прилетела! Говорят, что phpBB 4.0 будет написана с использованием Symfony 2.0
18
Янв
Некоторые особенности CSRF Protection в symfony
Запостил Jeka, в раздел Программирование
В данной заметке я привожу некоторую ситуацию, с которой я столкнулся при работе с формами в замечательном PHP фреймворке Symfony. В частности, проблема возникала при включенной защите от межсайтовых запросов (CSRF Protection), что это за защита вы можете прочитать в википедии (http://ru.wikipedia.org/wiki/CSRF, http://www.inattack.ru/article/552.html).
В симфонии при включенной CSRF защите в форму подставляется скрытое поле с именем _csrf_token, его значение формируется как md5 хеш от секретной строки, имени класса и идентификатора сессии (session_id).
Пример формирования значения токена в Symfony:
// sfForm.class.php
public function getCSRFToken($secret = null)
{
....
return md5($secret.session_id().get_class($this));
}
Следовательно, если после некоторого действия значение, возвращаемое session_id() меняется, то дальнейшая валидация созданных до этого момента форм, не будет корректно обрабатываться.
Такие случаи могут возникать, например, при авторизации пользователя (sfGuardPlugin) и дальнейшей обработке форм в одном запросе.
Пример, у нас есть две формы c полями:
1. sfGuardFormSignin: signin[username], signin[password]
2. AddressForm: address[phone],address[city],… -
Мы хотим в одном запросе авторизовать пользователя с помощью логина пароля и сохранить обязательные поля из формы address
Делаем примерно так:
$this->auth_form = !$this->getUser()->isAuthenticated() ? new sfGuardFormSignin() : null;
$this->address_form = new AddressForm();
if ($request->isMethod('post'))
{
// авторизуемся
if (!$this->getUser()->isAuthenticated())
{
$this->auth_form->bind($request->getParameter('signin'));
if ($this->auth_form->isValid())
{
$values = $this->auth_form->getValues();
$this->getUser()->signin($values['user'], array_key_exists('remember', $values) ? $values['remember'] : false);
$this->auth_form=null;
}
}
// обрабатываем форму адреса
$this->address_form->bind($request->getParameter('address'));
if ($this->address_form->isValid())
{
// что-то делаем с формой, например сохраняем
$this->address_form->save();
//...
$this->redirect('@somepath');
}
}
Допустим, авторизация прошла успешно, но валидация формы адреса не прошла. Тогда нам покажется форма адреса с ошибками, но исправив ошибки мы все равно получим не валидную форму так как session_id изменился, а форма адреса создавалась с учетом старого его значения и
нам будет в любом случае выдавать ошибку «csrf token: Required.».
Как избежать подобного?
Способ который я применил (на мой взгляд не очень красивый) заключается в следующем: нужно после авторизации поставить в сессию атрибут
о временном отключении «CSRF Protetion» перед обработкой форм проверять данный атрибут и отключать защиту CSRFT.
Пример:
$this->auth_form = !$this->getUser()->isAuthenticated() ? new sfGuardFormSignin() : null;
$this->address_form = new AddressForm();
if ($request->isMethod('post'))
{
// Авторизация
if (!$this->getUser()->isAuthenticated())
{
$this->auth_form->bind($request->getParameter('signin'));
if ($this->auth_form->isValid())
{
$values = $this->auth_form->getValues();
$this->getUser()->signin($values['user'], array_key_exists('remember', $values) ? $values['remember'] : false); // <<< здесь меняется session_id
$this->getUser()->setAttribute('disable_csrf',true); // <<< снимаем защиту CSRF
$this->auth_form=null;
}
}
// Отключаем защиту если требуется
if ($this->getUser()->getAttribute('disable_csrf',false))
{
sfForm::disableCSRFProtection();
unset ($this->address_form[sfForm::getCSRFFieldName()]);
}
// обработка формы адреса
$this->address_form->bind($request->getParameter('address'));
if ($this->address_form->isValid())
{
// что-то делаем с формой, например сохраняем
$this->address_form->save();
//...
$this->getUser()->setAttribute('disable_csrf',null); // если все хорошо включаем защиту CSRF обратно
$this->redirect('@somepath');
}
}
Все вышеприведенное тестировалось на версии symfony 1.2, в этой версии CSRF защиту можно отключить только глобально. В более новых версиях фреймворка (1.3, 1.4), появилась возможность отключать защиту локально для конкретной формы по отдельности, что более правильно.
З.Ы. Если кто-то скажет, как подобное можно более красиво решить, буду очень благодарен
2
Дек
sfYandexYMLPlugin – генерация YML для Яндекс.Маркета
Запостил Jeka, в раздел Новости, Программирование
Выложил еще один плагин, который позволяет упростить генерацию XML для сервиса Яндекс.Маркет.
В плагин входят несколько классов, которые предоставляют объектный интерфейс для генерации YML файла.
Описание формата YML можно посмотреть здесь http://partner.market.yandex.ru/legal/tt/
В данный момент, не все еще возможности реализованы.
Например, по товарным предложениям, реализовано только самое простое предложение (offer).
Классы не привязаны к фреймворку symfony, так что думаю использовать их можно в любом проекте на PHP.
Взять плагин сейчас возможно только из SVN.
Страница плагина: http://www.symfony-project.org/plugins/sfYandexYMLPlugin
SVN: http://svn.symfony-project.com/plugins/sfYandexYMLPlugin/trunk/
Последние записи:
- 02 Июл Мегадрама в IT семействе (Java 4...
- 01 Июл Apostrophe — наглядная CMS...
- 31 мая Конференция Symfony Camp UA 2010...
- 05 мая Doctrine 1.2: сортировка связей...
- 28 Апр Яндекс.Директ API
- 27 Апр Вышла стабильная версия Propel 1...
- 29 Мар Symfony: Фильтры формы – в...
- 17 Фев phpBB 4.0 & Symfony 2.0
- 18 Янв Некоторые особенности CSRF Prote...
- 02 Дек sfYandexYMLPlugin – генера...
Разделы:
- Администрирование (2)
- Новости (35)
- Программирование (23)
- Управление проектами (1)
Архивы:
- Июль 2010
- Май 2010
- Апрель 2010
- Март 2010
- Февраль 2010
- Январь 2010
- Декабрь 2009
- Ноябрь 2009
- Сентябрь 2009
- Август 2009
- Июль 2009
- Июнь 2009
- Май 2009
- Апрель 2009
- Март 2009
- Февраль 2009
- Январь 2009
- Ноябрь 2008
- Октябрь 2008
- Сентябрь 2008
- Август 2008