Also available in these languages:
DeutschEnglishEspañolFrançaisBahasa Indonesia日本語polskiPortuguêsRomâniaРусскийsvenska简体中文

Создание первого приложения

В этом разделе мы расскажем, как создать наше первое Yii-приложение. Для этого будем использовать мощную утилиту автоматической генерации кода yiic. Будем считать для удобства, что YiiRoot — это директория, куда установлен Yii, а WebRoot — корневая директория вашего веб-сервера.

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

% YiiRoot/framework/yiic webapp WebRoot/testdrive

Примечание: При использовании yiic на Mac OS, Linux или Unix вам может понадобится изменить разрешения для файла yiic, чтобы сделать его исполняемым. Альтернативный вариант запуска утилиты представлен ниже:

% cd WebRoot/testdrive
% php YiiRoot/framework/yiic.php webapp WebRoot/testdrive

В результате в директории WebRoot/testdrive будет создан каркас приложения.

Созданное приложение — хорошая отправная точка для добавления необходимого функционала, так как оно уже содержит все необходимые директории и файлы. Не написав ни единой строчки кода, мы уже можем протестировать наше первое Yii-приложение, перейдя в браузере по следующему URL:

http://hostname/testdrive/index.php

Приложение содержит четыре страницы: главную, страницу «о проекте», страницу обратной связи и страницу авторизации. Страница обратной связи содержит форму для отправки вопросов и пожеланий, а страница авторизации позволяет пользователю аутентифицироваться и получить доступ к закрытой части сайта (см. рисунки ниже).

Главная страница

Главная страница

Страница обратной связи

Страница обратной связи

Страница обратной связи с ошибками ввода

Страница обратной связи с ошибками ввода

Страница обратной связи с успешно отправленной формой

Страница обратной связи с успешно отправленной формой

Страница авторизации

Страница авторизации

Наше приложение имеет следующую структуру папок. Подробное описание этой структуры можно найти в соглашениях.

testdrive/
   index.php                    скрипт инициализации приложения
   index-test.php               скрипт инициализации функциональных тестов
   assets/                      содержит файлы ресурсов
   css/                         содержит CSS-файлы 
   images/                      содержит картинки
   themes/                      содержит темы оформления приложения
   protected/                   содержит защищенные файлы приложения
      yiic                      скрипт yiic
      yiic.bat                  скрипт yiic для Windows
      yiic.php                  PHP-скрипт yiic
      commands/                 содержит команды 'yiic'
         shell/                 содержит команды 'yiic shell'
      components/               содержит компоненты для повторного использования
         Controller.php         класс базового контроллераthe base class for all controller classes
         Identity.php           класс 'Identity' для аутентификации
         config/                содержит конфигурационные файлы
            console.php         файл конфигурации консоли
            main.php            файл конфигурации веб-приложения
            test.php            файл конфигурации функциональных тестов
         controllers/           содержит файлы классов контроллеров
            SiteController.php  класс контроллера по умолчанию
         data/                  сожержит пример базы данных
            schema.mysql.sql    схема БД для MySQL
            schema.sqlite.sql   схма БД для SQLite
            testdrive.db        файл БД для SQLite
         extensions/            содержит сторонние расширения
         messages/              содержит переведенные сообщения
         models/                содержит файлы классов моделей
            LoginForm.php       модель формы для действия 'login'
            ContactForm.php     модель формы для действия 'contact'
         runtime/               содержит временные файлы
         tests/                 содержит тесты
         views/                 содержит файлы представлений контроллеров и файлы макетов (layout)
            layouts/            содержит файлы представлений макетов
               main.php         макеты по умолчанию для всех представлений
            site/               содержит файлы представлений для контроллера 'site'
               pages/           статические страницы
                  about.php     страница «о проекте»
               contact.php      файл представления для действия 'contact'
               error.php        файл представления для действия 'error' (отображение ошибок)
               index.php        файл представления для действия 'index'
               login.php        файл представления для действия 'login'
            system/             содержит файлы системных представлений

Соединение с базой данных

Большинство веб-приложений используют базы данных, и наше приложение не исключение. Для использования базы данных необходимо объяснить приложению, как к ней подключиться. Это делается в конфигурационном файле WebRoot/testdrive/protected/config/main.php. Например, так:

return array('components'=>array('db'=>array(
            'connectionString'=>'sqlite:protected/data/testdrive.db',
        ),
    ),
    …
);

В приведённом выше коде указано, что приложение должно подключиться к базе данных SQLite WebRoot/testdrive/protected/data/testdrive.db как только это понадобится. Отметим, что база данных SQLite уже включена в сгенерированное приложение. В этой базе имеется только одна таблица tbl_user:

CREATE TABLE tbl_user (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);

Если вы хотите использовать базу данных MySQL, вы можете использовать файл WebRoot/testdrive/protected/data/schema.mysql.sql для её создания.

Примечание: Для работы с базой данных Yii требуется расширение PHP PDO и соответствующий драйвер PDO. Для тестового приложения необходимо подключить расширения php_pdo и php_pdo_sqlite.

Реализация операций CRUD

А теперь самое веселое. Мы бы хотели добавить операции CRUD (создание, чтение, обновление и удаление) для только что созданной таблицы User — это часто необходимо при создании реальных приложений. Чтобы сгенерировать необходимый код, снова воспользуемся утилитой yiic. Этот процесс также называют скаффолдинг (scaffolding).

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

% cd WebRoot/testdrive
% protected/yiic shell
Yii Interactive Tool v1.1
Please type 'help' for help. Type 'exit' to quit.
>> model User tbl_user
   generate models/User.php
   generate fixtures/tbl_user.php
   generate unit/UserTest.php

The following model classes are successfully generated:
    User

If you have a 'db' database connection, you can test these models now with:
    $model=User::model()->find();
    print_r($model);

>> crud User
   generate UserController.php
   generate UserTest.php
   mkdir D:/testdrive/protected/views/user
   generate create.php
   generate update.php
   generate index.php
   generate view.php
   generate admin.php
   generate _form.php
   generate _view.php

Crud 'user' has been successfully created. You may access it via:
http://hostname/path/to/index.php?r=user

В примере выше мы использовали команду shell утилиты yiic для взаимодействия с созданным каркасом приложением. В командной строке мы вводим две команды: model User tbl_user и crud User. Команда model автоматически создает класс модели User, основываясь на структуре таблицы tbl_user, а команда crud генерирует класс контроллера и файлы представлений, которые обеспечивают выполнение соответствующих операций CRUD.

Примечание: Даже, если проверка соответствия требованиям показывает, что расширение PDO и драйвер PDO, соответствующий используемой базе данных, включены, могут возникать ошибки типа «…could not find driver». В этом случае необходимо запустить утилиту yiic следующим образом:

% php -c path/to/php.ini protected/yiic.php shell

где path/to/php.ini — путь до файла PHP ini

Давайте порадуемся нашим трудам, перейдя по следующему URL:

http://hostname/testdrive/index.php?r=user

Мы увидим страницу со списком пользователей из таблицы tbl_user. Поскольку наша таблица пустая, то записей в ней не будет. Кликнем по кнопке Create User и, если мы еще не авторизованы, отобразится страница авторизации. Затем загрузится форма добавления нового пользователя. Заполним её и нажмем кнопку Create. Если при заполнении формы были допущены ошибки, мы увидим аккуратное сообщение об ошибке.

Возвращаясь к списку пользователей, мы должны увидеть в списке только что созданного пользователя. Добавим еще несколько пользователей. Обратите внимание, что при значительном количестве пользователей для их отображения на одной странице список будет автоматически разбиваться на страницы. Авторизовавшись в качестве администратора (admin/admin), можно увидеть страницу управления пользователями по адресу:

http://hostname/testdrive/index.php?r=user/admin

Появится аккуратная таблица пользователей. Можно кликнуть на заголовок таблицы, чтобы упорядочить записи по значениям соответствующего столбца. Для просмотра, редактирования или удаления соответствующей строки можно воспользоваться кнопками.

Всё это не требует написания кода!

Страница управления пользователями

Страница управления пользователями

Страница добавления нового пользователя

Страница добавления нового пользователя
$Id: quickstart.first-app.txt 1653 2010-01-02 23:05:07Z qiang.xue $
If you found any typos or errors in the tutorial, please create a Yii ticket to report it. If it is a translation error, please create a Yiidoc ticket, instead. Thank you.

Your Comment:

You may enter comment using Markdown syntax.

Please login with your forum account.
Note: you must have at least ONE forum post with your account.