Статьи

Быстрая разработка приложений с CakePHP

CakePHP — это фреймворк, который обеспечивает прочную основу для разработки PHP. Это позволяет пользователям любого уровня быстро разрабатывать надежные веб-приложения. Платформа следует принципам шаблона MVC (Model-View-Controller), который разделяет ваш код на три части:

  • Модель — код, который работает с данными (например, база данных, файловая система и другие поставщики данных)
  • View — код, который отображает данные и взаимодействует с интерфейсом (веб-страницы, RSS-каналы и т. Д.)
  • Контроллер — код, обеспечивающий основные функции приложения путем сбора входных данных, координирующих модель и представление кода

CakePHP дополняет шаблон, добавляя также компонент Dispatcher, чтобы помочь с маршрутизацией запросов к соответствующему контроллеру. Поток в приложении CakePHP для этого выглядит следующим образом:

Вы можете найти больше информации о шаблоне MVC на сайте Книги CakePHP .

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

В этой статье я познакомлю вас с двумя наиболее полезными функциями CakePHP:

  • автоматическая генерация кода с помощью консольного инструмента Bake
  • динамические леса

Я сделаю это, воссоздав пример, который Стивен Торп представил в своей статье « Распутывание MVC с CodeIgniter», используя эти две функции CakePHP. Пример приложения Thorpe представляет форму для сбора адреса электронной почты, проверки адреса, сохранения его в базе данных.

Установка и настройка

Прежде чем вы начнете писать какой-либо код, вам необходимо загрузить и установить последнюю версию CakePHP с веб-сайта CakePHP . Убедитесь, что ваш веб-сервер поддерживает перезапись URL (например, Apache делает это через mod_rewrite), так как он интенсивно используется CakePHP. Существуют и другие резервные методы, но они выходят за рамки этой статьи.

После получения кода CakePHP:

  1. Распакуйте архивный файл в корневой каталог вашего веб-сервера и переименуйте каталог для Subscribers .
  2. Сделайте каталог Subscribers/app/tmp доступным для записи для учетной записи пользователя, под которой работает веб-сервер.
  3. Откройте браузер и перейдите в каталог Subscribers (например, http://localhost/Subscribers/ ).

Вы должны увидеть страницу, похожую на следующую:

Философия CakePHP — «соглашение по конфигурации». Если вы следуете основным соглашениям CakePHP по присвоению имен для классов, переменных, имен файлов и путей, вы можете свести файлы конфигурации к важной информации.

Каталог app/Config является одним из соглашений CakePHP. В этом каталоге вы найдете файлы конфигурации по умолчанию и можете добавлять ваши файлы по мере необходимости. CakePHP предоставляет некоторые основные настройки в файле core.php , и вы можете переопределить эти настройки, отредактировав файл bootstrap.php который предназначен для вашего приложения. CakePHP также предоставляет пример файла для конфигурации database.php.default данных, который называется database.php.default .

Изменения в безопасности

В начальном выводе браузера вы должны увидеть два красных сообщения с просьбой отредактировать параметры Security.salt и Security.cipherSeed . Эти два параметра используются платформой для всех своих процедур шифрования, поэтому, очевидно, лучше иметь значения, отличные от поставляемых значений по умолчанию.

Откройте файл app/Config/bootstrap.php и вставьте эти две строки:

 <?php Configure::write('Security.salt', 'SomeSuperSecretLongStringHere'); Configure::write('Security.cipherSeed', 'SomeSuperSecretLongNumberHere'); 

CakePHP использует свой класс Configure для управления такими настройками. С этими строками вы используете статический метод Configure ‘s write() для установки новых значений. Значения будут сохранены в памяти в пределах объекта конфигурации. Другой метод, который вы будете часто использовать, это Configure::read() для получения настроек приложения. Соглашение об использовании Section.variableName для именования настроек называется точечной нотацией, и оно преобразуется внутренне с помощью CakePHP в ассоциативный массив.

Теперь, если вы перезагрузите страницу, два красных уведомления исчезнут.

Конфигурация базы данных

Желтое уведомление предлагает, как перейти к настройке подключения к базе данных: переименуйте (или скопируйте) app/Config/database.php.default в app/Config/database.php и откройте его в редакторе.

Класс DATABASE_CONFIG хранит детали для всех соединений с базой данных в своих открытых свойствах. Начальный файл предоставляет вам свойства $default и $test (первое используется по умолчанию приложением, а второе необязательно используется для тестов PHPUnit).

Каждая переменная представляет собой ассоциативный массив параметров, которые должны быть вам знакомы: hostname , login , password , database и prefix . Ключ источника данных задает, какой драйвер базы данных использовать, и по умолчанию используется MySQL ( Database/Mysql ). CakePHP использует PDO, поэтому он также поддерживает Postgres, SQLite и MS SQL Server. Кроме того, вы можете добавить пользовательские источники данных или переопределить существующие. Я продолжу демонстрацию с драйвером MySQL по умолчанию.

Создайте новую базу данных на cake_subscribers сервере (например, cake_subscribers ) и вставьте детали соединения в ваше соединение $default . Перезагрузите страницу, и вы должны увидеть зеленое уведомление о том, что «Cake может подключиться к базе данных».

Вам также понадобится таблица базы данных для сохранения информации о подписчике, поэтому используйте следующую команду для создания таблицы подписчиков:

 CREATE TABLE subscribers ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128) NOT NULL, last_name VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL UNIQUE, created DATETIME, modified DATETIME ) 

Другие полезные настройки

Заглянув в файл core.php вы увидите другие интересные настройки, которые можно переопределить с помощью файла bootstrap.php : сеансы и функции ведения журнала, обработка ошибок и исключений и многое другое. Одним из полезных параметров является уровень отладки. Значение по умолчанию равно 2, что означает, что отображаются ошибки и предупреждения, кэш всегда обновляется, а полный вывод SQL отображается внизу каждой страницы. Значение 1 будет подавлять вывод SQL. Значение 0 подходит для производства; регистрируются только ошибки, а специфичные для CakePHP исключения корректно отображаются как ошибки 404 или 501.

Генерация кода с Bake

После того, как вы настроили базовую среду, вы можете начать кодировать или … позвольте CakePHP написать какой-то код для вас! Консольный инструмент Bake очень мощный. Он может генерировать любые базовые компоненты (модели, представления и контроллеры) и другие полезные вещи, такие как модульные тесты.

Откройте окно терминала и перейдите в каталог вашего проекта (например, /Users/Shared/WebServer/Documents/Subscribers ) и выполните команду Bake, как показано здесь, чтобы сгенерировать код для модели:

  Vitos-Laptop: подписчики vito $ lib / Торт / Консоль / Торт / Выпекать модель
 Добро пожаловать в консоль CakePHP v2.0.5
 -------------------------------------------------- -------------
 Приложение: приложение
 Путь: / Пользователи / Общий / WebServer / Документы / Подписчики / Приложение /
 -------------------------------------------------- -------------
 -------------------------------------------------- -------------
 Испечь модель
 Путь: / Пользователи / Общий / WebServer / Документы / Подписчики / Приложение / Модель /
 -------------------------------------------------- -------------
 Использовать конфигурацию базы данных: (по умолчанию / тест) 
 [по умолчанию]> 

Нажмите Enter, чтобы подтвердить подключение к базе данных по умолчанию, и вы увидите:

  Возможные модели на основе вашей текущей базы данных:
 1. Подписчик
 Введите число из списка выше,
 введите имя другой модели или «q» для выхода  
 [q]> 

Введите 1, а затем Bake спросит, хотите ли вы указать критерии проверки для этой модели. Введите Y.

Для каждого поля Bake попросит вас выбрать одно или несколько правил проверки и предложит вам наиболее подходящие. Выберите notempty для полей name и last_name и email для поля email почты.

Последний вопрос касается модельных ассоциаций, и сейчас безопасно ввести N. Вы должны увидеть резюме:

  -------------------------------------------------- -------------
 Будет создана следующая модель:
 -------------------------------------------------- -------------
 Имя: Подписчик
 Таблица БД: `подписчики`
 Проверка: массив
 (
     [name] => Массив
         (
             [notempty] => notempty
         )

     [last_name] => Массив
         (
             [notempty] => notempty
         )

     [email] => Массив
         (
             [электронная почта] => электронная почта
         )

 )
 -------------------------------------------------- -------------
 Смотри хорошо?  (Г / л) 

Если все в порядке, введите Y и позвольте ему работать. Менее чем за минуту у нас есть класс модели, в комплекте с функциями проверки и тестирования. Дайте ему посмотреть в вашем редакторе. Потрясающие!

Теперь давайте сделаем то же самое для контроллера:

  Vitos-Laptop: подписчики vito $ lib / Cake / Console / торт / bake контроллер 

Нажмите клавишу ввода, чтобы принять конфигурацию базы данных по умолчанию, затем выберите контроллер Subscribers , затем введите Y, чтобы интерактивно построить контроллер, а затем Y, чтобы включить динамические леса. Окончательный результат должен выглядеть следующим образом:

  -------------------------------------------------- -------------
 Будет создан следующий контроллер:
 -------------------------------------------------- -------------
 Имя контроллера:
     Подписчики
 public $ scaffold;
 -------------------------------------------------- -------------
 Смотри хорошо?  (Г / л) 
 [у]> 

Автоматические пользовательские интерфейсы с лесами

Если вы откроете файл контроллера app/Controller/SubscribersController.php вы увидите, что он почти пуст; есть определение класса и открытое свойство с именем $scaffold . Bake может сгенерировать полный код для контроллеров, а также может генерировать представления (и я рекомендую вам попробовать), но ранее мы решили использовать функцию динамического скаффолдинга.

Скаффолдинг — это метод, который позволяет вам определять и создавать базовое приложение, которое может создавать, извлекать, обновлять и удалять объекты. Все, что вам нужно, чтобы использовать леса, это модель и контроллер. Скептически? Направьте ваш браузер на http://localhost/Subscribers/subscribers и вы должны увидеть это:

Интерфейс полностью функционален! Попробуйте вставить и отредактировать некоторые записи; вы увидите обработку ошибок в действии и полное разбиение на страницы.

Но если вы попытаетесь вставить дублированный адрес электронной почты, вы увидите очень плохое (но элегантное) сообщение об ошибке. Это происходит потому, что я применил индекс UNIQUE к полю email в базе данных, а CakePHP этого не знает. Откройте файл модели app/Model/Subscriber.php и измените его правило проверки электронной почты следующим образом:

 <?php ... 'email' => array( 'email' => array( 'rule' => array('email'), //'message' => 'Your custom message here', //'allowEmpty' => false, //'required' => false, //'last' => false, // Stop validation after this rule //'on' => 'create', // Limit validation to 'create' or 'update' operations ), 'unique' => array( 'rule' => array('isUnique'), 'message' => 'This email address is already registered', //'allowEmpty' => false, //'required' => false, //'last' => false, // Stop validation after this rule //'on' => 'create', // Limit validation to 'create' or 'update' operations ), ), 

Теперь попробуйте добавить повторяющийся адрес еще раз, и на этот раз вы увидите более понятное сообщение об ошибке.

Леса также могут быть перенаправлены на определенный путь, например /admin . Вы можете создавать и настраивать общедоступные страницы приложения и использовать функцию скаффолдинга для частной панели администрирования, предпочтительно используя одну из функций аутентификации, авторизации и безопасности CakePHP. Я покажу вам первый шаг, а затем позволю вам изучить другие.

Добавьте эту строку в ваш файл bootstrap.php :

 <?php Configure::write('Routing.prefixes', array('admin')); 

Это говорит CakePHP о синтаксическом анализе admin как префикса URL (вы можете использовать столько префиксов, сколько захотите). Затем в файле SubscribersController.php измените свойство scaffold следующим образом:

 <?php ... public $scaffold = 'admin'; 

Если вы снова откроете URL-адрес индекса подписчиков, вы должны увидеть ошибку, но если вы укажете на http://localhost/Subscribers/admin/subscribers вы увидите панель управления.

Резюме

В этой вводной статье вы увидели только верхушку айсберга возможностей CakePHP. CakePHP имеет множество функций, и почти каждая из них является расширяемой и настраиваемой в соответствии с вашими потребностями. Кроме того, вы можете рассчитывать на очень полезную документацию , полную справку по API и активное сообщество под названием The Bakery . Я предлагаю вам начать с обучающих программ и… Счастливой выпечки!

Изображение через sutsaiy / Shutterstock