0 follower

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

В этом разделе мы расскажем, как создать наше первое 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                    входной (entry) скрипт приложения
   assets/                      содержит файлы ресурсов
   css/                         содержит CSS-файлы 
   images/                      содержит картинки
   themes/                      содержит темы оформления приложения
   protected/                   содержит защищенные файлы приложения
      yiic                      скрипт yiic
      yiic.bat                  скрипт yiic для Windows
      commands/                 содержит команды 'yiic'
         shell/                 содержит команды 'yiic shell'
      components/               содержит компоненты для повторного использования
         MainMenu.php           класс виджета 'MainMenu'
         Identity.php           класс 'Identity' для аутентификации
         views/                 содержит файлы представлений для виджетов
            mainMenu.php        файл представления для виджета 'MainMenu'
         config/                содержит конфигурационные файлы
            console.php         файл конфигурации консоли
            main.php            файл конфигурации веб-приложения
         controllers/           содержит файлы классов контроллеров
            SiteController.php  класс контроллера по умолчанию
         extensions/            содержит сторонние расширения
         messages/              содержит переведенные сообщения
         models/                содержит файлы классов моделей
            LoginForm.php       модель формы для действия 'login'
            ContactForm.php     модель формы для действия 'contact'
         runtime/               содержит временные файлы
         views/                 содержит файлы представлений контроллеров и файлы макетов (layout)
            layouts/            содержит файлы представлений макетов
               main.php         макеты по умолчанию для всех представлений
            site/               содержит файлы представлений для контроллера 'site'
               contact.php      файл представления для действия 'contact'
               index.php        файл представления для действия 'index'
               login.php        файл представления для действия 'login'
            system/             содержит файлы системных представлений

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

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

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

Здесь мы добавили элемент db в массив components, который указывает приложению, что необходимо подключиться к базе SQLite WebRoot/testdrive/protected/data/source.db. Учтите, что как файл базы данных, так и директория, в которой он содержится, должны быть доступны для записи процессом веб-сервера, как того требует SQLite.

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

Используя любую утилиту для администрирования SQLite, создадим базу данных следующей схемы:

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

Примечание: Если вы используете БД MySQL, в выражении выше следует заменить AUTOINCREMENT на AUTO_INCREMENT.

Для простоты мы создадим в базе данных только таблицу User.

2. Создание операций CRUD

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

% cd WebRoot/testdrive
% YiiRoot/framework/yiic shell
Yii Interactive Tool v1.0
Please type 'help' for help. Type 'exit' to quit.
>> model User
   generate User.php

The 'User' class has been successfully created in the following file:
    D:\wwwroot\testdrive\protected\models\User.php

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

>> crud User
   generate UserController.php
   mkdir D:/wwwroot/testdrive/protected/views/user
   generate create.php
   generate update.php
   generate list.php
   generate show.php
   generate admin.php
   generate _form.php

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

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

Примечание: Даже, если проверка соответствия требованиям показывает, что расширение 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

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

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

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

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

Все эти возможности не требуют написания кода!

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

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

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

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