Functional approach in PHP

The code snippet below will only work in PHP-5.3+!. Isn’t it the famous functional programming with functions as first class citizens, closures and other functional bla-bla? <?php> function one($a = 0) { return function(callable $b) use ($a) { return call_user_func($b, $a); }; } print_r(call_user_func(one(1), function ($x) { return $x + 4; } )); This was created just for fun. As you may see, in place of callable you can put any valid PHP callable, e.g.in a form ['Class', 'method'] ...

October 19, 2016 · 1 min · rodush

Form builder — entity field: «Class BundleAliasName:EntityClassName does not exist «

После обновления symfony-2.1 до версии из транка (symfony-2.1.0-beta4) отвалилась форма, в которой я использовал поле типа entity, где в качестве класса сущности указал не полный путь к классу, а через bundle alias: $builder->add('field_name, 'entity', array( 'class' => 'BundleAliasName:EntityClassName', 'multiple' => true ) ) // ..... Код выбрасывал исключение с сообщением «Class BundleAliasName:EntityClassName does not exist» Если прописать полный путь через пространство имен: array( 'class' => 'Full\Bundle\Path\Entity\EntityClassName', ) то все работало хорошо. ...

July 26, 2012 · 1 min · rodush

Как обновить проект с symfony-2.0 до symfony-2.1

Изначально я создавал свой проект на версии symfony 2.0 без vendors (standard edition). Все зависимости были установлены через php bin/vendors install Проект находился в git-репозитории. Сразу оговорка — на момент написания статьи версия symfony 2.1 находилась в стадии бета-тестирования. Тем не менее, основная тенденция уже была понятна и значительных изменений в АПИ не предвиделось. Одно из ключевых нововведений в symfony 2.1 — использование Composer. На вебсайте фреймворка Symfony можно найти описание процесса создания нового проекта, но нет информации как обновить существующий. ...

July 7, 2012 · 2 min · rodush

Symfony 2.0 FOSUserBundle — ошибка «Could not load type»

Если вы используете FOSUserBundle вместе с symfony 2.0 и вам понадобилось переопределить какую-либо из форм, идущих «в комплекте» с этим плагином, то, без сомнения, вы прочитали эту заметку: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md После обновления вашей страницы может случиться прискорбная ситуация — сообщение об ошибке «Could not load type ….» (вместо многоточия ваш alias для кастомной формы). Вроде бы и в файле app/config.yml все верно с отступами (имеется ввиду конфигурация fos_user сервиса), и файл конфигурации вашего сервиса service.xml (или service.yml) (в CustomUserBundle) описан правильно, и везде совпадает alias, getName() и т.п…. а все та же ошибка. Бывало? Не беда! 🙂 Есть решение вашей проблемы! Читайте далее, и все окажется просто! ...

June 19, 2012 · 2 min · rodush

How to change PHPMyAdmin session timeout

By default, the session lifetime in a new PhpMyAdmin installation using the “cookie”; authentication method is 1440 seconds (24 minutes). That is, after 24 minutes of inactivity, the next request will take the user to the login page. To increase the session lifetime, set the value of the variable to say, 60x longer: $cfg['LoginCookieValidity'] = 1440 * 60; // 86400 means one day (24-hours)

March 27, 2011 · 1 min · rodush

Отслеживание ошибок и уведомлений PHP

Иногда бывает необходимо отследить некритические ошибки, возникающие в работе РНР скрипта (E_WARNING, E_NOTICE, etc.) и куда-то их грамотно собрать. К примеру, мы хотим сделать валидацию XML файла с помощью XMLReader (кстати, об этом, думаю, можно рассказать в отдельной публикации). В случае, если XML невалидный, то выбросить исключение, прекратив дальнейшую работу. Все ошибки валидации выдаются через “WARNING”-сообщения. Для того, чтобы получить такое сообщение можно поступить следующим образом: // Track the errors (to be able to store the PHP error message) $oldConfigValue = ini_set('track_errors', '1'); while ($xmlReader->read()) {} // полностью читаем XML if (!$xmlReader->isValid()) { throw new Exception('XML does not conform to schema. ' . $php_errormsg); } // Set back track_errors setting: ini_set('track_errors', $oldConfigValue); Здесь мы сначала устанавливаем директиву РНР 'track_errors' (Отслеживать ошибки) в TRUE (1). А далее — magic! 🙂 ...

March 20, 2011 · 1 min · rodush