0 follower

Генерация каркаса

Create, read, update и delete (CRUD) — четыре основных операции, при помощи которых можно управлять данными. В нашем приложении главная задача состоит в том, чтобы реализовать операции CRUD для записей и комментариев. В этом разделе мы будем использовать инструмент yiic для выполнения этой задачи. Этот процесс также известен как scaffolding.

Откроем командную строку и выполним следующие команды:

% /wwwroot/yii/framework/yiic shell /wwwroot/blog/index.php
Yii Interactive Tool v1.0
Please type 'help' for help. Type 'exit' to quit.
>> model User
......
>> model Post
......
>> model Tag
......
>> model Comment
......
>> crud Post
......
>> crud Comment
......
>> exit

Информация: Некоторые установленные копии PHP могут использовать другой файл php.ini для PHP анализатора командной строки (CLI). В результате выполнения команд выше, Вы можете столкнуться с такими ошибками как "YiiBase::include(PDO.php): failed to open stream..." или "...could not find driver". Дважды проверьте свою конфигурацию PHP CLI, выполнив следующую команду:

php -r "phpinfo();"

Результат команды покажет, какой файл php.ini используется и какие расширения загружены. Если используется неправильный файл php.ini, можно использовать следующую команду, чтобы явно задать нужный файл php.ini:

php -c php.ini /wwwroot/yii/framework/yiic.php shell /wwwroot/blog/index.php

Команды выше выполняют две задачи. Команды model генерируют файл класса модели для каждой таблицы базы данных. Команды CRUD генерируют код, необходимый операциям CRUD для моделей Post и Comment.

Мы можем проверить сгенерированный код, перейдя по следующим URL:

http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

Заметим, что возможности записей и комментариев, реализованные в сгенерированном коде, полностью независимы друг от друга. При создании новой записи или комментария, мы обязаны вводить информацию, такую как authId и createTime, которая в реальном приложении должна устанавливаться программой. Мы устраним эти проблемы на следующих этапах. На данном этапе прототип уже содержит большинство возможностей, которые мы должны реализовать в нашем приложении.

Чтобы подготовиться к следующим этапам, давайте поближе познакомимся с содержимым сгенерированных файлов. Все сгенерированые файлы расположены в директории /wwwroot/blog/protected. Для удобства мы разделяем их на модели, контроллеры и представления:

  • файлы моделей:

    • Models/User.php содержит класс User, который наследуется от CActiveRecord и может использоваться для обращения к таблице User;
    • Models/Post.php содержит класс Post, который наследуется от CActiveRecord и может использоваться для обращения к таблице Post;
    • Models/Tag.php содержит класс Tag, который наследуется от CActiveRecord и может использоваться для обращения к таблице Tag;
    • Models/Comment.php содержит класс Comment, который наследуется от CActiveRecord и может использоваться для обращения к таблице Comment;
  • файлы контроллеров:

    • Controllers/PostController.php содержит класс PostController, который является контроллером, отвечающим за все операции CRUD для записей;
    • Controllers/CommentController.php содержит класс CommentController, который является контроллером, отвечающим за все операции CRUD для комментариев;
  • файлы представлений:

    • views/post/create.php — файл представления, который показывает HTML-форму для создания записи;
    • views/post/update.php — файл представления, который показывает HTML-форму для обновления записи;
    • views/post/show.php — файл представления, который отображает подробную информацию поста;
    • views/post/list.php — файл представления, который отображает список записей;
    • views/post/admin.php— файл представления, который отображает записи в таблице с административными командами.
    • views/post/_form.php — частичный файл представления, который отображает HTML-форму для сбора информации о посте. Он включается в представления create и update.
    • Подобный набор файлов представлений также сгенерирован для комментариев.

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

  1. Входной скрипт выполняется Web-сервером и инициализирует экземпляр приложения для обработки запроса;
  2. Приложение создает экземпляр класса PostController и выполняет его;
  3. Экземпляр класса PostController выполняет требуемое действие list (метод actionList());
  4. Метод actionList() делает запрос к базе данных для получения списка последних записей;
  5. Метод actionList() генерирует представление list с данными записей.