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