Turbolinks и AngularJS

В одном из текущих проектов на Ruby on Rails решили использовать AngularJS в качестве основного js-фреймворка. Все бы хорошо вот только «из коробки» он не работает с Turbolinks.

При первом посещении страницы проекта все хорошо, но при переходе на любую ссылку AngularJS перестает работать. Связанно это с тем, что, используя Turbolinks страница не перезагружается полностью(только часть которая в body) и не происходит вызов события ready для страницы.

Решение довольно простое:

# "обычная" инициализация AngularJS приложения
window.App = angular.module('AppName', [])

# инициализация AngularJS приложения для работы с Turbolinks
$(document).on 'page:load', ->
  angular.bootstrap(document, ['AppName'])

В приведенном примере кода видно, что, помимо стандартной инициализации AngularJS добавлена инициализация при наступлении события «page:load». Вызов этого события происходит в тот момент когда Turbolinks полностью загрузит страницу.

Это решает проблему совместной работы Turbolinks и AngularJS.

CakePHP. Перенос на хостинг

На различных форумах часто вижу что люди спрашивают как перенести проект на CakePHP с одного хостинга на другой, или с локальной машины на хостинг.
Чтобы без проблем перенести сайт достаточно всего нескольких простых действий:

  1. Задаем права 777 для каталога /app/tmp и всех его подкаталогов
  2. Удаляем все файлы(только файлы, каталоги оставляем) из каталога /app/tmp/cache
  3. В файле /app/config/core.php находим строчку «Configure::write(‘debug’, 2)» и проверяем чтобы на месте цифры 2 был ноль
  4. В файле /app/config/database.php меняем имя базы данных и информацию для доступа к ней.(если на новом хостинге эта информация отличается от старой)

В большинстве случаев этих простых шагов будет достаточно и ваш сайт заработает.
Если этого не произошло то можно попробовать сделать следующее:

  1. В файле /app/config/core.php находим строчку «Configure::write(‘debug’, 0)» и вставляем вместо 0 число 2. Это включит вывод ошибок на сайте
  2. Смотрим логи которые пишет фреймворк в каталоге /app/tmp/logs/
  3. Смотрим лог ошибок вебсервера. Его расположение зависит от используемого вебсервера и его настроек

Эти действия позволят вам найти и исправить возможные ошибки.

Так же следует обратить внимание на используемую версию php. В некоторых случаях(к примеру при использовании сторонних классов и библиотек) ваш проект может содержать код который не может быть выполнен установленной версией php.

CakePHP и относительные пути url в JavaScript

Способность web-приложения работать не только в корневом каталоге сайта, но и в любом подкаталоге делает его более привлекательным для использования.

Если при использовании CakePHP соблюдать стандарты и для формирования url использовать $html->link() и Router::url() то ссылки в приложении всегда будут с учетом того из какого каталога оно запущенно.

Но, как всегда есть «но». JavaScript ничего не подозревает о том из какого каталога запущено приложение. Из-за этого возникает проблема с url для AJAX запросов. Ниже я приведу один из способов решения этой проблемы.

Первым делом добавим во все layout’ы строчку в секцию head:

<base href="<?php echo Router::url('/'); ?/>" />

Continue reading

Защищенное соединение (SSL/HTTPS) для сайта на CakePHP

Недавно в одном проекте над которым я работаю возникла необходимость для всего сайта принудительно использовать защищенный протокол Https. Как всегда фреймворк CakePHP позволил сделать это с минимальными затратами.

Continue reading

Обновление CakePHP. Версия 1.3.5

С прошлого обновления прошло полтора месяца. За это время разработчики успели сделать больше 50-ти комитов в репозиторий и закрыть 40 тикетов.

Список самых значительных изменений:

  • На главную (по умолчанию) страницу добавлено уведомление о возможно неправильно работающих библиотеках PCRE;
  • RequestHandlerComponent теперь автоматически отправляет загаловки content-type и encoding;
  • Названия таблиц содержащие пробелы теперь работают корректно;
  • Улучшена совестимость с Postgres 9.0;
  • MemcacheEngine теперь корректно работает с IPv6 адресами;
  • Тэг <cake:nocache> теперь удаляется даже если CacheHelper не загружен;
  • SecurityComponent теперь корректно работает с иенами пользователей которые состоят из e-mail адресов;
  • Роутер теперь правильно обрабатывает выражения для параметра :action.

Скачать новую версию можно здесь.

Использование UUID в качестве первичного ключа

Первичные ключи в таблицах обычно имеют целочисленный тип и обычно автоинкрементные. При добавлении новой записи СУБД автоматически подставляет значение этого поля которое на единицу больше чем предыдущее.

В CakePHP существует возможность вместо числа использовать UUID. Для этого всего лишь необходимо для вашего первичного ключа указать тип CHAR(36) или  BINARY(36), все остальное CakePHP сделает сам.

Используем шаблонизатор Twig в CakePHP

Есть такой замечательный php-шаблонизатор Twig которым с недавнего времени занимается автор фреймворка Symfony — Fabien Potencier.

По заверениям авторов этот шаблонизатор один из самых быстрых. Сторонние разработчики тоже подтверждают это.

Но речь в посте пойдет не о прелестях Twig, а о том как его можно «прикрутить» к CakePHP.
Continue reading

Новый релиз CakePHP. Версия 1.3.4

Новая версия включает 77 коммитов в репозиторий и 54 закрытых тикета.

Вот несколько изменений которые могут повлиять на работу вашего приложения:

  • Файл схемы БД для плагинов теперь имеет переменную имени класса $PluginSchema, вместо AppSchema;
  • Параметры роутинга содержащие внутри «-» теперь работают как ожидается;
  • Исправленна ошибка при которой метод SessionComponent::destroy() не всегда удалял данные;
  • Улучшенна работа «Scaffold’инга» при работе с темами;
  • Метод String::insert() теперь работает лучше с ключами в начале которых содержатся другие ключи;
  • DboMysql теперь корректно работает с получением столбцов и параметров таблицы;
  • Исправленна ошибка функции setlocale(), связанная с использованием символа «,» ;
  • EmailComponent теперь более корректно обрабатывает адреса электронной почты имеющие алиасы.

Скачать новую версию можно из оффициального репозитория.

CakePHP Utils Plugin. Новый, мега плагин.

Команда разработчиков моего любимого фреймворка CakePHP не перестает радовать каждый день. На днях они выпустили новый плагин, который будет полезен каждому разработчику на CakePHP.

Итак, встречайте CakePHP Utils Plugin.

Continue reading