Введение в CakePHP

book

В этом уроке мы создадим проект «Записная книжка».
Управление контактами: просмотр списка контактов, просмотр деталей контакта, изменение и удаление.
Это основные приемы, из которых состоит любой проект.

  1. Создаю cakephp проект в Eclipse.
  2. Скачиваю последнюю версию CakePHP github.com/cakephp
  3. Распаковываю содержимое архива в папку проекта. Теперь в проекте у меня структура папок:
    • app – наше будущее приложение
    • cake – библиотеки фреймворка
    • plugin – папка для возможных плагинов
    • vendors – папка для возможных других библиотек
  4. Установим для папки cakephp рекурсивно права 777 (возможность записи).Для Linux:
    sudo chmod -R 777 /var/www/cakephpДля Windows:
    Правой кнопкой на папку -> Свойства -> отжимаем «только чтение» -> Применить для вложеных папок и файлов.
  5. Заходим на http://localhost/cakephp/
  6. Смотрим желтые нотисы. Читаем, переводим и делаем соответствующие телодвижения:
    Изменить значение ‘Security.salt’ в файле app/config/core.php
    Изменить значение ‘Security.cipherSeed’ в файле app/config/core.php
    Переименовать файл config/database.php.default в config/database.phpЧто значит изменить значение?
    Это как пин код в телефоне меняется. Просто добавляем цифры или изменяем существующие.
  7. Заходим в PhpMyAdmin http://localhost/phpmyadmin/
  8. Создаем базу данных cakephp c кодировкой utf8_general_ciКодировку utf8_general_ci лучше выставить по умолчанию
  9. Обновляем 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 можно также создать и других пользователей.

  10. Обновляем страницу – теперь все полосы зеленые. Можем приступать к первому контроллеру.
  11. Разработаем страницу для управления контактами (эдакая записная книжка) с возможностями:
    • просмотреть все контакты
    • посмотреть детальную информацию об одном контакте
    • удалить контакт
    • создать контакт
    • изменить контакт
  12. Заходим на урл 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';
    }
    ?>
    
  13. Создаем этот файл app/controllers/contacts_controller.phpи вставляем код, который нам предлагает CakePHP:
    <?php
    class ContactsController extends AppController {
    
    }
    
  14. Обновляем страницу
    // Missing Database Table
    // Error: Database table contacts for model Contact was not found.
    
  15. Создаем таблицу 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;
    
  16. Обновляем страницу
    // 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. Просто вставляем его внутрь класса.

  17. Обновляем страницу
    // 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 - название контроллера.
    
  18. Обновим страницу

    Теперь все работает.
    Начнем писать логику.

    Для себя пометим следующее:
    для каждого текущего задания у нас будет определенный контроллер (Controller), метод (Action) и Вью (отображение, View).

    На данный момент:
    Контроллер: название – Contacts, файл – /app/controller/contacts_controller.php
    Метод: название – index, расположение – внутри класса ContactsController
    Вью: название – index (такое же как и название метода), файл – /app/views/contacts/index.ctp

    Самое главное понять эту методику. Все остальное просто.

  19. В отображении напишем:

    <h2>Contacts</h2>
    <?php debug($data) ?>
    

    debug – это стилизированный вывод функции var_dump или print_r.

    Обновим страницу:

    // Undefined variable: data [APP/views/contacts/index.ctp, line 2]
    

    Это значит, что мы используем не определенную ранее переменную.

    Все переменные должны устанавливаться в контроллере.

http://is.gd/E0l04k
6 Октябрь 2011

Добавить комментарий