Создание сайта на Yii2 - Часть 1

Просмотров: 26854Комментарии: 8
Yii2 Framework
Создание сайта на Yii2 - Часть 1

Сегодня мы рассмотрим как создать новое приложение на Yii Framework 2.0. Рассказ об установке веб-сервера мы пропустим, и перейдем сразу к сути. Так как недавно вышел релиз Yii Framework 2.0, то думаю статья будет актуальной для новичков, которые хотят изучить этот фреймворк. После установки веб-сервера открываем командную строку и переходим в директорию, где находятся наши локальные сайты.

Установка Yii-2

Для установки приложения нам понадобиться Composer, хорошие веб-приложения не могут существовать без него, скачиваем его командой:

php -r "readfile('https://getcomposer.org/installer');" | php

Новая версия Yii2 использует пакеты Bower и NPM через Composer, поэтому для правильной работы приложения, нам также необходимо установить глобально плагин Composer Asset Plugin:

php composer.phar global require "fxp/composer-asset-plugin:1.0.0"

Теперь можно установить само приложение, за основу возьмем yii2-app-basic:

php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic myblog.loc

Проверяем требования фреймворка через браузер по следующему адресу:

http://myblog.loc/requirements.php

Для проверки выполнения установки пробуем открыть сайт в браузере по адресу http://myblog.loc/web/, вы должны увидеть сообщение "Congratulations!".

Настройте виртуальный хост, что бы корень DocumentRoot указывал на папку web вашего приложения.

myblog.loc => /myblog.loc/web

Для этого добавляем в файл httpd.conf Apache или в конфигурационный файл виртуального хоста следующее:

<VirtualHost *:80>
  DocumentRoot "<путь>/myblog.loc/web"
  ServerName "myblog.loc"
  ServerAlias "myblog.loc"
</VirtualHost>

Теперь ваше приложение будет доступно по адресу: http://myblog.loc/

Настройка базы данных и создание миграций проекта

Настраиваем подключение к базе данных через файл ./config/db.php. Здесь все просто, задаем имя базы данных, имя и пароль для входа, а также префикс таблиц.

<?php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=local_myblog',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
    'tablePrefix' => 'blog_'
];

Создаем файл миграций, который будет создавать таблицы в базе данных. В консоли прописываем:

yii migrate/create create_tables

В папке migrations появиться новый файл *_create_tables.php, в нем то мы и пропишем создание таблиц и добавление админа (admin|admin):

public function safeUp()
{
    $tableOptions = null;
    if ($this->db->driverName === 'mysql') {
        $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
    }
    $this->createTable('{{%user}}', [
        'id' => Schema::TYPE_PK,
        'username' => Schema::TYPE_STRING . ' NOT NULL',
        'password' => Schema::TYPE_STRING . ' NOT NULL',
        'auth_key' => Schema::TYPE_STRING . ' NOT NULL',
        'token' => Schema::TYPE_STRING . ' NOT NULL',
        'email' => Schema::TYPE_STRING . ' NOT NULL'
    ], $tableOptions);
    $this->createIndex('username', '{{%user}}', 'username', true);
    $this->createTable('{{%category}}', [
        'id' => Schema::TYPE_PK,
        'name' => Schema::TYPE_STRING . ' NOT NULL',
        'description' => Schema::TYPE_STRING
    ], $tableOptions);
    $this->createIndex('name', '{{%category}}', 'name', true);
    $this->createTable('{{%post}}', [
        'id' => Schema::TYPE_PK,
        'title' => Schema::TYPE_STRING . ' NOT NULL',
        'content' => Schema::TYPE_TEXT . ' NOT NULL',
        'category_id' => Schema::TYPE_SMALLINT . ' unsigned NOT NULL',
        'status' => Schema::TYPE_SMALLINT . ' NOT NULL',
        'created_at' => Schema::TYPE_INTEGER . ' NOT NULL',
        'updated_at' => Schema::TYPE_INTEGER . ' NOT NULL'
    ], $tableOptions);
    $this->createIndex('status', '{{%post}}', 'status');
    $this->createTable('{{%comment}}', [
        'id' => Schema::TYPE_PK,
        'author' => Schema::TYPE_STRING . ' NOT NULL',
        'email' => Schema::TYPE_STRING . ' NOT NULL',
        'url' => Schema::TYPE_STRING . ' NOT NULL',
        'content' => Schema::TYPE_TEXT . ' NOT NULL',
        'status' => Schema::TYPE_SMALLINT . ' NOT NULL'
    ], $tableOptions);
    $this->createIndex('status', '{{%comment}}', 'status');
    $this->execute($this->addUserSql());
}
private function addUserSql()
{
    $password = Yii::$app->security->generatePasswordHash('admin');
    $auth_key = Yii::$app->security->generateRandomString();
    $token = Yii::$app->security->generateRandomString() . '_' . time();
    return "INSERT INTO {{%user}} (`username`, `email`, `password`, `auth_key`, `token`) VALUES ('admin', 'admin@myblog.loc', '$password', '$auth_key', '$token')";
}
public function safeDown()
{
    $this->dropTable('{{%user}}');
    $this->dropTable('{{%post}}');
    $this->dropTable('{{%comment}}');
    $this->dropTable('{{%category}}');
}

Теперь если мы выполним в консоли команду migrate, то у нас должны создаться в базе четыре новые таблицы, которые мы описали выше.

yii migrate

Настройка приложения

Открываем файл конфигурации ./config/web.php для настройки нашего приложения. Тут важно прописать несколько параметров.

  • id - уникальный индекс приложения, который отличает его от других.
  • basePath - корневая папка приложения
  • bootstrap - массив компонент начальной загрузки
  • language - язык приложения
  • components - настройка компонентов приложения
  • params - параметры приложения
  • modules - подключение модулей приложения
<?php
$params = require(__DIR__ . '/params.php');
$config = [
    'id' => 'app_myblog',
    'name' => 'Мой блог на YII2',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'language' => 'ru-RU', 
    ...

assetManager

Чтобы приложение не копировало файлы бутстрапа, jquery и скриптов yii, а также других каких-то ассетов, в папку web, можно настроить его на создание линков:

'components' => [
    'assetManager'=>[
        'class'=>'yii\web\AssetManager',
        'linkAssets'=>true,
    ],
    ...

urlManager

Чтобы сделать более человеко-понятные URL, например для улучшения их читабельности, необходимо сконфигурировать компонент urlManager.

'components' => [
    ...
    'urlManager' => [
        'class'=>'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
           //Здесь будет описание правил ЧПУ
        ],
    ],
    ...

Также для работы с ЧПУ необходимо в папку WEB поместить файл .htaccess следующего содержания

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Это необходимо при использовании параметра showScriptName, иначе приложение не найдет входной скрипт.

Продолжение читаем во второй части статьи

Комментариев: 8 RSS

1 Александр 03-11-2014 16:54

В консоли линукса yii нужно запускать как ./yii

Иначе консоль выдаст сообщение об ошибке.

Вопрос автору. Подскажите, что нужно добавить в стандартную конфигурацию nginx, что бы заработали "человеко-понятные" URL?

2 Дмитрий 01-12-2014 01:55

Александр, вот посмотрите на оффсайте , там есть нужное решение для nginx:

https://github.com/yiisoft/yii2/blob/master/docs/guide/start-installation.md

3 Andrew 16-12-2014 23:11

Скажите, пожалуйста, как сделать вот это:

Настройте виртуальный хост, что бы корень DocumentRoot указывал на папку web вашего приложения.

myblog.loc => /myblog.loc/web

4 Мимо проходил 13-01-2015 05:58

Andrew, создать.htaccess со следующим содержимым(или добавить в существующий)

RewriteEngine on

RewriteRule ^$ web/ [L]

RewriteRule (.*) web/$1 [L]

5 Николай 03-06-2015 19:08

Сделал все по инструкции Вашей по миграции БД, но не создалось 4 таблицы. создалась только таблица migration... Подскажите что не так?

Вот код миграции:

====

6 Николай 03-06-2015 19:42

Разобрался сам grin

Не удалил функции up и down которые были пустыми по умолчанию в файле миграции

7 Андрей 16-06-2015 01:06

Спасибо за статью. Откуда взялась пятая таблица blog_migration?

8 Admin 17-06-2015 13:51

При выполнении команды yii migrate создается автоматом

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

     

  

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

(обязательно)