- Начало
- Основы
- Работа с формами
- Работа с БД
- Кэширование
- Расширение Yii
- Тестирование
- Специальные темы
В этом разделе мы расскажем, как создать наше первое 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
(создание, чтение, обновление и удаление) для только что созданной таблицы 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
Появится аккуратная таблица пользователей. Можно кликнуть на заголовок таблицы, чтобы упорядочить записи по значениям соответствующего столбца. Для просмотра, редактирования или удаления соответствующей строки можно воспользоваться кнопками.
Всё это не требует написания кода!
Страница управления пользователями

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