CakePHP — это фреймворк, который обеспечивает прочную основу для разработки PHP. Это позволяет пользователям любого уровня быстро разрабатывать надежные веб-приложения. Платформа следует принципам шаблона MVC (Model-View-Controller), который разделяет ваш код на три части:
- Модель — код, который работает с данными (например, база данных, файловая система и другие поставщики данных)
- View — код, который отображает данные и взаимодействует с интерфейсом (веб-страницы, RSS-каналы и т. Д.)
- Контроллер — код, обеспечивающий основные функции приложения путем сбора входных данных, координирующих модель и представление кода
CakePHP дополняет шаблон, добавляя также компонент Dispatcher, чтобы помочь с маршрутизацией запросов к соответствующему контроллеру. Поток в приложении CakePHP для этого выглядит следующим образом:
Вы можете найти больше информации о шаблоне MVC на сайте Книги CakePHP .
Лично причина, по которой я предпочитаю CakePHP по сравнению с другими средами PHP, заключается в его лучшей поддержке консольных приложений. CakePHP имеет мощный консольный инструмент, который можно настроить для создания приложений как для веб-сайтов, так и для консольного мира.
В этой статье я познакомлю вас с двумя наиболее полезными функциями CakePHP:
Я сделаю это, воссоздав пример, который Стивен Торп представил в своей статье « Распутывание MVC с CodeIgniter», используя эти две функции CakePHP. Пример приложения Thorpe представляет форму для сбора адреса электронной почты, проверки адреса, сохранения его в базе данных.
Установка и настройка
Прежде чем вы начнете писать какой-либо код, вам необходимо загрузить и установить последнюю версию CakePHP с веб-сайта CakePHP . Убедитесь, что ваш веб-сервер поддерживает перезапись URL (например, Apache делает это через mod_rewrite), так как он интенсивно используется CakePHP. Существуют и другие резервные методы, но они выходят за рамки этой статьи.
После получения кода CakePHP:
- Распакуйте архивный файл в корневой каталог вашего веб-сервера и переименуйте каталог для
Subscribers. - Сделайте каталог
Subscribers/app/tmpдоступным для записи для учетной записи пользователя, под которой работает веб-сервер. - Откройте браузер и перейдите в каталог
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


