Введение в CakePHP
В этом уроке мы создадим проект «Записная книжка».
Управление контактами: просмотр списка контактов, просмотр деталей контакта, изменение и удаление.
Это основные приемы, из которых состоит любой проект.
- Создаю cakephp проект в Eclipse.
- Скачиваю последнюю версию CakePHP github.com/cakephp
- Распаковываю содержимое архива в папку проекта. Теперь в проекте у меня структура папок:
- app – наше будущее приложение
- cake – библиотеки фреймворка
- plugin – папка для возможных плагинов
- vendors – папка для возможных других библиотек
- Установим для папки cakephp рекурсивно права 777 (возможность записи).Для Linux:
sudo chmod -R 777 /var/www/cakephpДля Windows:
Правой кнопкой на папку -> Свойства -> отжимаем «только чтение» -> Применить для вложеных папок и файлов. - Заходим на http://localhost/cakephp/
- Смотрим желтые нотисы. Читаем, переводим и делаем соответствующие телодвижения:
Изменить значение ‘Security.salt’ в файле app/config/core.php
Изменить значение ‘Security.cipherSeed’ в файле app/config/core.php
Переименовать файл config/database.php.default в config/database.phpЧто значит изменить значение?
Это как пин код в телефоне меняется. Просто добавляем цифры или изменяем существующие. - Заходим в PhpMyAdmin http://localhost/phpmyadmin/
- Создаем базу данных cakephp c кодировкой utf8_general_ciКодировку utf8_general_ci лучше выставить по умолчанию
- Обновляем http://localhost/cakephp/Cake is NOT able to connect to the database.Настроим подключение к базе данных в файле app/config/database.php
class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => 'password', 'database' => 'cakephp', 'prefix' => '', 'encoding' => 'utf8' ); }Заменяем код из файла на этот код.
Здесь также добавлен параметр encoding – кодировка соединения.login, password – соответствуют значениям по умолчанию для установленного MySQL. Логин обычно «root», пароль может быть или пустой или «password».
Используя phpMyAdmin можно также создать и других пользователей.
- Обновляем страницу – теперь все полосы зеленые. Можем приступать к первому контроллеру.
- Разработаем страницу для управления контактами (эдакая записная книжка) с возможностями:
- просмотреть все контакты
- посмотреть детальную информацию об одном контакте
- удалить контакт
- создать контакт
- изменить контакт
- Заходим на урл http://localhost/cakephp/contacts
Missing Controller Error: ContactsController could not be found. Error: Create the class ContactsController below in file: app/controllers/contacts_controller.php <?php class ContactsController extends AppController { var $name = 'Contacts'; } ?> - Создаем этот файл app/controllers/contacts_controller.phpи вставляем код, который нам предлагает CakePHP:
<?php class ContactsController extends AppController { } - Обновляем страницу
// Missing Database Table // Error: Database table contacts for model Contact was not found.
- Создаем таблицу contacts в нашей базе данных.Можно это сделать используя phpMyAdmin, а можно выполнить такой SQL:
CREATE TABLE IF NOT EXISTS `contacts` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT , `first_name` VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL , `last_name` VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL , `date_of_birthday` DATE NOT NULL , `vkontakte` VARCHAR( 50 ) CHARACTER SET latin2 NOT NULL , `created` DATETIME NOT NULL , `modified` DATETIME NOT NULL , `photo` VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT =1;
- Обновляем страницу
// Missing Method in ContactsController // Error: The action index is not defined in controller ContactsController // Error: Create ContactsController::index() in file: app/controllers/contacts_controller.php. <?php class ContactsController extends AppController { var $name = 'Contacts'; function index() { } } ?>Выделено то, что нужно добавить в наш класс.
В данном случае это метод index. Просто вставляем его внутрь класса. - Обновляем страницу
// Missing View // Error: The view for ContactsController::index() was not found. // Error: Confirm you have created the file: /var/www/cakephp/app/views/contacts/index.ctp
Создаем пустой файл app/views/contacts/index.ctpВ папке app/views/ – находятся папки с названиями контроллеров.
Наш контроллер называется contacts.
В папке app/views/contacts/ будут находиться отображения (виды или Views) для конкретных методов контроллера. В данном случае это index.Вид – это html-файл. Разметка того какая переменная и где на странице она будет находиться.
В папке app/controllers/ находяться контроллеры приложения.
Предположим юзер зашел на сайт.Ввел урл, например, «mysite.com/posts/add»
- mysite.com – это домен сайта
- posts – это контроллер (Controller)
- add – это действие (метод, экшн, Action)
Для этого нам нужен метод add в контроллере:
function add() { }После слеша могут быть еще параметры:
mysite.com/posts/add/Александр/21/красныйЭто параметры для действия:
- Александр
- 21
- красный
function add ($name='', $age=0, $color='') { }Вот в скобочках и задаются эти параметры в том же порядке.
app/controllers/contacts_controller.php – это файл контроллера. Название контроллера должно состоять из двух частей – contacts (название контроллера маленькими буквами) и _controller.php (обязательная часть имени для контроллера). Класс контроллера должен быть записан в нотации ВерблюдСтиль: ContactsController. Все контроллеры наследуются от базового контроллера AppController. То есть в начале каждого файла контроллера должны быть такие строки:
<?php class SomeController extends AppController { // где Some - название контроллера. - Обновим страницу
Теперь все работает.
Начнем писать логику.Для себя пометим следующее:
для каждого текущего задания у нас будет определенный контроллер (Controller), метод (Action) и Вью (отображение, View).На данный момент:
Контроллер: название – Contacts, файл – /app/controller/contacts_controller.php
Метод: название – index, расположение – внутри класса ContactsController
Вью: название – index (такое же как и название метода), файл – /app/views/contacts/index.ctpСамое главное понять эту методику. Все остальное просто.
-
В отображении напишем:
<h2>Contacts</h2> <?php debug($data) ?>
debug – это стилизированный вывод функции var_dump или print_r.
Обновим страницу:
// Undefined variable: data [APP/views/contacts/index.ctp, line 2]
Это значит, что мы используем не определенную ранее переменную.
Все переменные должны устанавливаться в контроллере.