Pull to refresh

Что нового в CakePHP 3.0.0?

Reading time6 min
Views10K
Здравствуйте, уважаемые читатели. В данной статье хотелось бы написать о новой версии CakePHP и возродить интерес к этому замечательному PHP фреймворку. Последняя заметка в блоге о CakePHP датирована почти годом назад и многие могли подумать, что фреймворк прекратил своё существование, однако это не так. Он очень активно развивается и весьма популярен в западных странах и его используют такие компании, как BMW и Hyundai.

Текущая стабильная версия CakePHP – 2.5.5. Давайте кратко посмотрим, какие возможности предоставляет этот фреймворк сейчас, а затем подробно остановимся на новинках, которые появятся в 3.0.0.

Почему стоит использовать CakePHP?


CakePHP позволяет создавать веб приложения проще, быстрее и писать меньше кода. Нет никаких сложных XML или YAML файлов. Просто сконфигурируйте соединение с базой данных и начинайте разработку. Вместо раздумывания над тем, где, что и как лучше разместить, положитесь на продуманные конвенции CakePHP, которые помогут вам в разработке приложения. Вещи, которые нужны практически в каждом проекте уже внедрены. Поддержка мультиязычности, доступ к базам данных, кэширование, валидация, аутентификация и многое другое уже встроено в ядро фреймворка. Вот краткий список возможностей CakePHP 2.5.5:

  • Совместимость с версиями PHP 5.2.8 и выше
  • Встроенная ORM для взаимодействия с базой данных
  • Скаффолдинг — построение каркаса приложения по структуре базы данных
  • Генерация кода из командной строки
  • MVC архитектура
  • Диспетчер запросов, гибкие URL и маршрутизация
  • Встроенная валидация
  • Быстрая и гибкая шаблонизация с синтаксисом PHP и помощниками
  • Помощники Видов для AJAX, JavaScript, HTML форм и др.
  • Email, cookie, security, session, и request компоненты
  • Гибкий ACL
  • Нормализация данных
  • Гибкое кэширование
  • Поддержка локализации
  • Работает из любой директории сайта и практически не требует конфигурации Apache
  • Отличная документация и активное сообщество CakePHP
  • Фреймворк выпускается под лицензией MIT, что идеально подходит для его использования в коммерческих проектах

В январе 2014 года увидело свет первое превью CakePHP 3.0.0. В настоящее время активно продолжается разработка и совсем недавно вышел CakePHP 3.0.0-beta, что означает, что релиз уже не за горами. А пока давайте посмотрим, что нового появляется в третьей версии.

Что нового в CakePHP 3.0.0-beta?


Изменения в структуре каталогов и в именовании

  • Одинаковая структура каталогов для приложений и плагинов. Это даст возможность при работе с плагинами чувствовать себя так, как будто вы работаете в небольшом модульном приложении.
  • src/Config теперь /config
  • src/bootstrap.php теперь /config/bootstrap.php 
  • log-файлы теперь на верхнем уровне директории по умолчанию
  • шаблоны Bake теперь должны лежат в src/Template/Bake 
  • Плагины, которые используют вендорные префиксы (например AcmeCorp/Users) больше не переименовываются. Вместо использования Users.User вы теперь должны использовать AcmeCorp/Users.User. Также, вендорные префиксы будут использованы как имя папки в папке плагина, таким образом плагин будет установлен в plugins/AcmeCorp/User
  • Файлы исключений были перемещены в соответствующие им пространства имен

Улучшения ORM

  • Добавлена поддержка Microsoft SQL Server
  • Пустые ассоциации в BelongsTo и HasOne больше не создают пустую сущность. Вместо этого, свойством ассоциации будет null
  • Параметры для всех различных операций ORM теперь согласованы
  • Вы можете указать белый список полей, когда сортируемые данные отсутствуют в запросе и есть в сущностях
  • Теперь легче реализовать собственные типы столбцов с помощью метода _initializeSchema для таблиц
  • Query::newExpr() теперь позволяет SQL выражения
  • Условия с обнуляемыми значениями теперь легче создавать.'field IS' => $val сгенерирует правильный SQL, когда $val не равен NULL.
  • Условия с ключевым словом IN стали лучше работать с пустыми данными
  • Добавлен Query::autoFields(). Это контролирует, были ли автоматически выбраны поля для основной таблицы
  • Способность передать опции искателя отдельным искателям из paginator, используя ключ FinderOptions
  • Теперь возможно получить отдельную колонку значений из базы данных, используя Schema\Table::defaultValue()
  • Добавлен accessibleFields как опциональный ключ для newEntity() и patchEntity(). Это позволит более тонко осуществлять контроль для масового назначения
  • TranslateBehavior автоматически находит переводы, основанные на текущей локали приложения
  • Добавлен метод Table::findOrCreate()
  • Возможность переопределять тип join для ассоциаций, используя contain()
  • Миграции теперь являются официальным плагином CakePHP. Он оборачивает отличную библиотеку Phinx в оболочку CakePHP, чтобы избежать повторения конфигурационных строк и добавить некоторые особенности CakePHP

Важные изменения

  • Разделение фреймворка на отдельные компоненты для самостоятельного использования: коллекции, валидация, утилиты, события, ядро
  • Класс маршрутизатора переписан и добавлены новые методы, позволяющие файлам роутинга больше соответствовать принципу DRY, чем раньше. Маршруты по умолчанию, предоставляемые CakePHP, были удалены. Их место занял маленький набор маршрутов, предоставляемый, чтобы помочь на стадии прототипа разработки приложений
  • Слияние тем и плагинов. Теперь вы можете использовать любой плагин в качестве темы. Это делает упаковку и распространение тем таким же легким, как и плагинов и позволяет использовать помощники и ячейки
  • Появились View Cells — это маленькие классы, которые по функциональности похожи на контроллеры, но могут использоваться непосредственно во view, чтобы получить данные из любого источника и отобразить определенный шаблон
  • Создание объектов View было упрощено, они теперь больше не зависят от контроллеров
  • Переработаны фильтры диспетчера — фильтры теперь регистрируются как экземпляры объекта, а не через конфигурационные данные, что добавляло вложенную зависимость
  • Новый объект сессии. В CakePHP 3.0, вы можете получить доступ к сессии с помощью объекта запроса $this->request->session()
  • Раньше CookieComponent мог работать только в одном пространстве имен. Переработанный CookieComponent отделяет конфигурацию пространства имен cookie от обработки данных cookie
  • Новый класс Time — теперь класс Time может делать все то же самое, что и библиотеки Carbon и DateTime
  • CakePHP 3.0 дает разработчикам больше инструментов для создания и рендеринга нескольких видов сообщений простым образом. Для этого были созданы отдельный компонент и помощник FlashHelper и FlashComponent
  • CacheHelper был удален из CakePHP. Команда разработчиков рекомендует функции этого помощника выполнять на отдельном сервере, например Varnish.
  • Класс L10n был удален. Построенная на ext/intl и Aura/Intl новая подсистема локализации предлагает более мощный синтаксис замены и сохраняет обратную совместимость форматтера, основанного на sprintf()
  • Добавлен метод Validator::notEmpty()
  • Request::isMobile теперь использует внешнюю библиотеку, чтобы соответствовать увеличивающемуся количеству мобильных устройств
  • Bcrypt в паролях по умолчанию
  • Новый интерфейс логирования. Теперь все движки логирования реализуют Psr\Log\LoggerInterfaceinterface
  • Появился новый IntegrationTestCase класс для тестирования всех аспектов HTTP запроса в вашем приложении
  • Появился DebugKit – это панель инструментов для приложения, которая собирает полезную статистику о вашем коде, такую как время и память, выполненные запросы, лог-сообщения и переменные представления
  • Улучшения консоли
  • Улучшена производительность за счет ускорения в процессе загрузки и генерации некоторых частей помощников шаблонов
  • Новый шаблон пекарни

Плагины


С каждым днем начинает появляться всё больше плагинов для версии 3.0. Вот только самые интересные из них:
  • TwigView — шаблонизатор Twig
  • Imagine — плагин для работы с изображениями
  • Geo — содержит библиотеки утилит и поведения для работы с гео данными
  • Blame — регистрирует идентификатор пользователя, который модифицирует строку в базе данных
  • CakePdf — генерирует PDF файлы, используя различные движки
  • Authenticate — адаптеры авторизации и аутентификации
  • TinyAuth — легковесная система авторизации
  • TwitterBootstrap — плагин для генерации интерфейсов бутстрапа
  • Whoops — альтернативный рендерер исключений с удобным интерфейсом для отладки
  • Assetic — минифицирует и обрабатывает (pre-process) CSS и Javascript

Вы можете скачать релиз 3.0.0-beta или просто использовать composer create-project -s dev cakephp/app, чтобы попробовать CakePHP 3.0 уже сейчас.

Полезные ссылки


CakePHP — Официальная страница фреймворка
CookBook — Официальная документация
API — Описание классов CakePHP
GitHub – Исходный код для всех релизов
Plugins — Репозиторий плагинов фреймворка
Пекарня — Советы, руководства и статьи
Community Center — Список официальных страниц и каналов сообщества

В данной статье очень кратко описан полный список изменений. Если читателям эта тема будет интересна, то в следующих статьях вы сможете прочитать подробно о самых значимых изменениях и способах миграции с версии 2.x.
Only registered users can participate in poll. Log in, please.
Интересна ли вам тема, связанная с CakePHP?
51.22% Да, продолжайте!126
26.02% Нет, у CakePHP нет будущего.64
22.76% Мне все равно…56
246 users voted. 53 users abstained.
Tags:
Hubs:
+2
Comments7

Articles