Сервис на Yii2: Установка и настройка приложения

Содержание

Настройка Composer

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

Во-первых, мы обновляем основную информацию. Меняем значения , , , и на соответствующие вашему проекту.

А сейчас интересная часть. вы можете добавить больше пакетов, необходимых для вашего приложения, в раздел . Все они с packagist.org. Стоит его изучить так как там множество пакетов с полезным кодом.

После того как ваш настроен, вы можете выполнить в консоли команду , подождать пока требуемые пакеты загрузятся и установятся, и начать их использовать. Автозагрузка классов этих пакетов будет осуществляться автоматически.

diggindata/yii2-app-basic Yii 2 Basic Project Template — Enhanced

Yii 2 Basic Project Template

Yii 2 Basic Project Template is a skeleton Yii 2 application best for rapidly creating small projects.

This is a fork of the offifcial Yii 2 Basic Project Template.


The template contains the basic features including user login/logout and a contact page. It includes all commonly used configurations that would allow you to focus on adding new features to your application.

These modules are included:

  • raoul2000/yii2-bootswatch-asset: Use Bootswatch theme in your Yii application with minimum effort
  • dektrium/user: Flexible user registration and authentication module for Yii2
  • dektrium/rbac: RBAC management module for Yii2
  • nemmo/yii2-attachments: Extension for file uploading and attaching to the models
  • bizley/migration: Migration generator for Yii 2
  • yii2mod/yii2-settings: Yii2 Settings Module
  • thrieu/yii2-grid-view-state: Save filters from GridView to session, keep the filter state between pages.

Also it contains a Lookups module and CRUD to manage gridview saved filters.

There are Gii templates for ActiveRecored models and CRUD pages.

TESTING

Tests are located in directory. They are developed with Codeception PHP Testing Framework. By default there are 3 test suites:

Tests can be executed by running

The command above will execute unit and functional tests. Unit tests are testing the system components, while functional tests are for testing user interaction. Acceptance tests are disabled by default as they require additional setup since they perform testing in real browser.

Running acceptance tests

To execute acceptance tests do the following:

  1. Rename to to enable suite configuration

  2. Replace package in with to install full featured version of Codeception

  3. Update dependencies with Composer

  4. Download Selenium Server and launch it:

    In case of using Selenium Server 3.0 with Firefox browser since v48 or Google Chrome since v53 you must download GeckoDriver or ChromeDriver and launch Selenium with it:

    # for Firefox java -jar -Dwebdriver.gecko.driver=~/geckodriver ~/selenium-server-standalone-3.xx.x.jar

    # for Google Chrome java -jar -Dwebdriver.chrome.driver=~/chromedriver ~/selenium-server-standalone-3.xx.x.jar

    As an alternative way you can use already configured Docker container with older versions of Selenium and Firefox:

  5. (Optional) Create database and update it by applying migrations if you have them.

    The database configuration can be found at .

  1. Start web server:

  2. Now you can run all available tests

Code coverage support

By default, code coverage is disabled in configuration file, you should uncomment needed rows to be able to collect code coverage. You can run your tests and collect coverage with the following command:

You can see code coverage output under the directory.

Устанавливаем Vagrant

Для работы Vagrant нужен VirtualBox или какой-то другое ПО для виртуализации. После этого, заходим на сайт и скачиваем Vagrant для вашей ОС и запускаем установку программы.

Устанавливаем плагины для Vagrant. В консоле выполняем команды:

vagrant plugin install vagrant-vbguest
vagrant plugin install vagrant-hostmanager

Устанавливаем бокс для PHP одним из самых популярных .В каталоге вашего проекта выполняем команду:

git clone https://github.com/scotch-io/scotch-box.git

теперь, заходим в каталог scotch-box и запускаем команду:

vagrant up

Загрузка данных, может занять около 10-15 мин.

После того, как загрузка закончится, можно перейти по адресу (это стандартный адрес для scotch-box) и увидеть стартовую страницу.

В папке scotch-box у вас появится папка public в которую можно устанавливать ваш сайт.

Вы можете выполнить в консоле команду:

vagrant ssh

чтобы войти на ваш виртуальный хост по ssh.

Для выключения виртуального бокса, выполняем команду:

vagrant halt

Более подробный список команд можно получить, выполнив команду:

vagrant list-commands

Безопасная конфигурация сервера ¶

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

Как избежать атаки типа -header

Классы типа yii\web\UrlManager и yii\helpers\Url могут использовать ] для генерации ссылок. Если веб-сервер настроен на обслуживание одного и того же сайта независимо от значения заголовка , эта информация может быть ненадежной и может быть подделана пользователем, отправляющим HTTP-запрос. В таких ситуациях Вы должны либо исправить конфигурацию своего веб-сервера, чтобы обслуживать сайт только для указанных имен узлов, либо явно установить или отфильтровать значение, установив свойство компонента приложения .

Дополнительные сведения о конфигурации сервера смотрите в документации Вашего веб-сервера:

  • Apache 2:
  • Nginx: https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/

Если у Вас нет доступа к конфигурации сервера, Вы можете настроить фильтр yii\filters\HostControl уровня приложения для защиты от такого рода атак:

Криптография

Кеширование: Обзор

Found a typo or you think this page needs improvement?Edit it on github !

Installation guide: Yii-2 advanced template with RBAC system

Welcome, all of you !


Here I am giving the steps for an easy installation of yii2-advanced template with an RBAC(Role Based Access Control) system.

Installtion : Yii2 — advanced template

Here we are going to install yii2-advanced template using composer. So if you don’t have composer in your machine, please download and install the latest version of it. After installing composer please check whether it is accessible from the CMD by running the command like:

If the above command gives a +ve response, then it’s okay. Now we can start.

Open a new CMD window and locate to your server root directory. I am using server so myself would be like:

Then run the command for creating a new application named as like:

The template will be downloaded from git repository. After the template is installed, locate to the newly created application directory in CMD like:

Then you should initialize the application by running in CMD. The initialization will generate the entry scripts and config files for your application. Run the command like:

You can select the environment type from the given options:

Now the installation of yii2-advanced template is completed, but still there is no database. So we want to create and use a database too. First of all we should install an RBAC module. Here I am using for RBAC. Take a look at the following steps:

Installation: RBAC system into your application

From the CMD window run the command for installing into your newly created application like:

It will be downloaded from git. After installation, the package (yii2-admin) will be located in the directory.

Then you should add some parameters to the configuration file to access the and as:

Create a database in MySql and configure your file by adding the database credentials. Currently, there is no user table in your database. So you need to create user table for user management. For this yii2 provides an option for database migration. Run the command in CMD for creating a proper user table for the user management. In CMD,

The above command will create and tables for your application.

Then change the user component properties in config file as:

Populate the table by adding users. Use this link to register users to your application:http://localhost/yii2-app/backend/web/index.php?r=admin/user/signup

You can use authManager class to authorize users using database. For that you should execute a database migration using the command . Before that add and change the class in the config file like :

and remove from the config file after migration. Execute the migration as:

Don’t forget to remove from the config file .

You can use the following RBAC URLs to create and manage permissions/roles to the users:

http://localhost/yii2-app/backend/web/index.php?r=adminhttp://localhost/yii2-app/backend/web/index.php?r=admin/routehttp://localhost/yii2-app/backend/web/index.php?r=admin/permissionhttp://localhost/yii2-app/backend/web/index.php?r=admin/menuhttp://localhost/yii2-app/backend/web/index.php?r=admin/rolehttp://localhost/yii2-app/backend/web/index.php?r=admin/assignmenthttp://localhost/yii2-app/backend/web/index.php?r=admin/user


Then you can create and manage and assign them to the existing users using this interface. After setting the , for checking whether a user has access to a particular action in a controller you need to add configuration parameters to the file.

You can add the public actions in array. The other actions will be checked by the class for authorization.

Use the following github links for more instructions about and :https://github.com/yiisoft/yii2-app-advancedhttps://github.com/mdmsoft/yii2-admin

Hope this article will help you to install and easily. Thanks for reading.

Happy coding 🙂

Настройка веб сервера #

Приложение, установленное по инструкциям, приведённым выше, будет работать сразу как с Apache, так и с Nginx под Windows и Linux с установленным PHP 5.4 и выше. Yii 2.0 также совместим с HHVM. Тем не менее, в некоторых случаях поведение при работе с HHVM отличается от обычного PHP. Будьте внимательны.

На рабочем сервере вам наверняка захочется изменить URL приложения с на . Для этого необходимо изменить корневую директорию в настройках веб сервера так, чтобы та указывала на . Дополнительно можно спрятать следуя описанию в разделе «Разбор и генерация URL». Далее будет показано как настроить Apache и Nginx.

Рекомендуемые настройки Apache

Добавьте следующее в Apache или в конфигурационный файл виртуального хоста. Не забудьте заменить на корректный путь к .

Рекомендуемые настройки Nginx

PHP должен быть установлен как FPM SAPI для Nginx. Используйте следующие параметры Nginx и не забудьте заменить на корректный путь к и на ваше имя хоста.

Используя данную конфигурацию установите в чтобы предотвратить лишние системные вызовы .

Учтите, что используя HTTPS необходимо задавать чтобы Yii мог корректно определять защищенное соединение.

Конфигурации и окружения

Существует множество проблем при типичном подходе к настройке конфигурации:

  • Каждый член команды имеет свою собственную конфигурацию. Изменение конфигурации в общем репозитории повлияет на всех остальных.
  • Пароль от эксплуатационной БД и API ключи не должны оказаться в репозитории.
  • Существует много окружений: development (разработка), testing (тестирование), production (эксплуатация). Каждое окружение должно иметь свою собственную конфигурацию.
  • Настройка всех параметров конфигурации для каждого случая однотипна и отнимает слишком много времени.

Для решения этих проблем Yii вводит простую концепцию окружений. Каждое окружение представлено набором файлов в директории . Для переключения между окружениями используется команда . Она довольно проста. Всё, что она на самом деле делает — это копирование всех файлов из директории окружения в корневую директорию, где находятся все приложения.

Обычно окружение содержит входные скрипты приложения, такие как , и файлы конфигурации, имена которых дополнены суфиксами . Эти файлы добавлены в и никогда не попадут в репозиторий.

Чтобы избежать дублирования, конфигурации перекрывают друг друга. Например, приложение frontend считывает конфигурацию в следующем порядке:

Параметры считываются в следующем порядке:

Значения из следующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.

Полная схема:

Использование сторонних библиотек в Yii ¶

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

Использование пакетов Composer

Многие сторонние библиотеки поставляются в виде пакетов Composer. Для установки таких библиотек достаточно проделать два простых шага:

  1. Изменить файл своего приложения и указать, какие пакеты Composer нужно устанавливать.
  2. Выполнить команду , чтобы установить указанные пакеты.

Классы установленных пакетов Composer поддерживают автозагрузку с помощью автозагрузчика Composer. Убедитесь, что во входном скрипте приложения присутствуют следующие строки, подключающие автозагрузчик Composer:

Использование отдельных библиотек

Если библиотека не поставляется в виде пакета Composer, необходимо установить ее согласно ее руководству по установке. В большинстве случаев потребуется вручную скачать файл с релизом и распаковать его в директорию , где соответствует приложения.

Если библиотека использует собственный автозагрузчик классов, его можно подключить во входном скрипте приложения. Желательно подключить его до того, как подключается файл , чтобы при автоматической загрузке классов у автозагрузчика классов Yii был приоритет.

Если библиотека не поставляется с автозагрузчиком классов, но конвенция именования ее классов соответствует PSR-4, для загрузки ее классов можно использовать автозагрузчик Yii. Для этого достаточно для каждого корневого пространства имен, которые используются в ее классах, объявить . Предположим, что библиотека установлена в директорию , а ее классы объявлены в корневом пространстве имен . В конфигурации приложения можно использовать следующий код:

Если ни один из предыдущих вариантов не подходит, скорее всего для использования библиотеки нужно настроить в конфигурации PHP директиву . Настройте ее, следуя инструкциям, которые поставляются с библиотекой.

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

  • Определить, какие классы входят в состав библиотеки.
  • Перечислить классы и пути к соответствующим файлам в во входном скрипте приложения. Например,

Проверка установки #

После установки приложение будет доступно по следующему URL:

Здесь подразумевается, что вы установили приложение в директорию в корневой директории вашего веб сервера сервер работает локально (). Вам может потребоваться предварительно его настроить.

Вы должны увидеть страницу приветствия «Congratulations!». Если нет — проверьте требования Yii одним из способов:

  • Браузером перейдите по адресу
  • Или выполните команду в консоли:

Для корректной работы фреймворка вам необходима установка PHP, соответствующая его минимальным требованиям. Основное требование — PHP версии 5.4 и выше. Если ваше приложение работает с базой данных, необходимо установить расширение PHP PDO и соответствующий драйвер (например, для MySQL).

Использование Yii 2 в связке с Yii 1 ¶

Если в прошлом вам приходилось использовать Yii 1, не исключено, что у вас до сих пор где-то используются приложения на этой платформе. Вместо того, чтобы переписывать все приложение под Yii 2, может быть целесообразно расширить его используя отдельные функции, которые появились в Yii 2. Для этого нужно выполнить следующие действия.

Во-первых, установите Yii 2 в существующем приложении, выполняя действия, описанные в .

Во-вторых, внесите следующие изменения во входной скрипт приложения:

Так как класс используется и в Yii 1, и в Yii 2, нужно будет создать его модифицированную версию, обслуживающую обе версии фреймворка. В приведенном выше коде подключается модифицированный файл класса со следующим содержимым:

Вот и все! Теперь в любом месте кода можно с помощью конструкции получить доступ к экземпляру приложения Yii 2, а с помощью конструкции — к экземпляру приложения Yii 1:

Шаблонизаторы


Использование Yii в качестве микро-framework’а

Found a typo or you think this page needs improvement?Edit it on github !

Установка при помощи Composer #

Установка Composer

Если Composer еще не установлен это можно сделать по инструкции на getcomposer.org, или одним из нижеперечисленных способов. На Linux или Mac используйте следующую команду:

На Windows, скачайте и запустите Composer-Setup.exe.

В случае возникновения проблем читайте раздел «Troubleshooting» в документации Composer. Если вы только начинаете использовать Composer, рекомендуем прочитать как минимум раздел «Basic usage».

В данном руководстве предполагается, что Composer установлен . То есть он доступен через команду . Если вы используете из локальной директории, изменяйте команды соответственно.

Если у вас уже установлен Composer, обновите его при помощи .

После установки Composer устанавливать Yii можно запустив следующую команду в папке доступной через веб:

Установка Yii

Эта команда устанавливает последнюю стабильную версию Yii в директорию . Если хотите, можете выбрать другое имя директории.

Установка шаблона приложения Advanced ¶

Установка шаблона Advanced немного сложнее, чем установка Basic, из-за того, что в Advanced имеются две директории webroot, работа с которыми на виртуальном хостинге не поддерживается. По этой причине нам потребуется внести изменения в структуру директорий.

Перемещение входных скриптов в одну директорию webroot

Для начала нам необходима директория webroot. Создайте новую директорию и назовите её так же, как на виртуальном хостинге, например, или , как описывалось выше в разделе . Затем создайте следующую структуру в :

Нашей фронтенд директорией будет . Переместите в неё всё из . Так же поступите и для , скопировав всё в . В каждом случае нужно настроить пути внутри файлов и .

Отдельные сессии и куки

Изначально подразумевалось, что приложения бекенд и фронтенд располагаются на разных доменах. Теперь, когда мы перенесли всё на один домен, куки и сессии из бекенда и фронтенда стали пересекаться. Для решения этой проблемы требуется внести следующие настройки в конфигурацию бекенд-приложения :

Оптимизация производительности

Шаблонизаторы

Found a typo or you think this page needs improvement?Edit it on github !

Авторизация в Yii2 по e-mail вместо username

public static function findByEmail($email)
{
    return static::findOne();
}
<?php

namespace app\models;

use Yii;
use yii\base\Model;

/**
 * LoginForm is the model behind the login form.
 *
 * @property User|null $user This property is read-only.
 *
 */
class LoginForm extends Model
{
    public $email;
    public $password;
    public $rememberMe = true;
    private $_user = false;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // username and password are both required
            , 'required'],
            , 'email'],
            // rememberMe must be a boolean value
            ,
            // password is validated by validatePassword()
            ,
        ];
    }

    /**
     * Validates the password.
     * This method serves as the inline validation for password.
     *
     * @param string $attribute the attribute currently being validated
     * @param array $params the additional name-value pairs given in the rule
     */
    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, 'Incorrect username or password.');
            }

        }
    }

    /**
     * Logs in a user using the provided username and password.
     * @return bool whether the user is logged in successfully
     */
    public function login()
    {
        if ($this->validate()) {
            return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
        }
        return false;
    }

    /**
     * Finds user by ]
     *
     * @return User|null
     */
    public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByEmail($this->email);
        }
        return $this->_user;
    }

}
<?= $form->field($model, 'email')->textInput() ?>

Весь исходный код доступен на github:

Preparing application ¶

After you install the application, you have to conduct the following steps to initialize the installed application. You only need to do these once for all.

  1. Open a console terminal, execute the command and select as environment.

    If you automate it with a script you can execute in non-interactive mode.

  2. Create a new database and adjust the configuration in accordingly.

  3. Open a console terminal, apply migrations with command .

  4. Set document roots of your web server:

    • for frontend and using the URL
    • for backend and using the URL

    For Apache it could be the following:

    For nginx:

  5. Change the hosts file to point the domain to your server.

    • Windows:
    • Linux:

    Add the following lines:

Difference from basic project template

Настройка веб сервера ¶

Приложение, установленное по инструкциям, приведённым выше, будет работать сразу как с Apache, так и с Nginx под Windows и Linux с установленным PHP 5.4 и выше. Yii 2.0 также совместим с HHVM. Тем не менее, в некоторых случаях поведение при работе с HHVM отличается от обычного PHP. Будьте внимательны.

На рабочем сервере вам наверняка захочется изменить URL приложения с на . Для этого необходимо изменить корневую директорию в настройках веб сервера так, чтобы та указывала на . Дополнительно можно спрятать следуя описанию в разделе «Разбор и генерация URL». Далее будет показано как настроить Apache и Nginx.

Рекомендуемые настройки Apache

Добавьте следующее в Apache или в конфигурационный файл виртуального хоста. Не забудьте заменить на корректный путь к .

Рекомендуемые настройки Nginx

PHP должен быть установлен как FPM SAPI для Nginx. Используйте следующие параметры Nginx и не забудьте заменить на корректный путь к и на ваше имя хоста.

Используя данную конфигурацию установите в чтобы предотвратить лишние системные вызовы .

Учтите, что используя HTTPS необходимо задавать чтобы Yii мог корректно определять защищенное соединение.

Введение: Обновление с версии 1.1

Запуск приложения

Found a typo or you think this page needs improvement?Edit it on github !

Добавляем регистрацию на сайте в Yii2 basic

Для начала создадим модель для форм регистрации, для этого необходимо создать файл /models/SignupForm.php со следующим содержимым:

<?php

namespace app\models;

use Yii;
use yii\base\Model;

/**
 * Signup form
 */
class SignupForm extends Model
{

    public $username;
    public $email;
    public $password;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return ,
            ,
            ,
            ,
            ,
            ,
            ,
            ,
            ,
            ,
            ,
        ];
    }

    /**
     * Signs user up.
     *
     * @return User|null the saved model or null if saving fails
     */
    public function signup()
    {

        if (!$this->validate()) {
            return null;
        }

        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        return $user->save() ? $user : null;
    }

}

Далее в /controllers/SiteController.php в use добавляем модель регистрации SignupForm и экшен signup:

<?php

namespace app\controllers;

//...
use app\models\LoginForm;
use app\models\ContactForm;
use app\models\SignupForm;

class SiteController extends Controller
{

    //...

    public function actionSignup()
    {
        $model = new SignupForm();

        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', );
    }

}

Далее необходимо добавить представление для регистрации, добавляем файл /views/site/signup.php со следующим содержимым:

<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;

$this->title = 'Signup';
$this->params[] = $this->title;
?>
<div class="site-signup">
    <h1><?= Html::encode($this->title) ?></h1>
    <p>Please fill out the following fields to signup:</p>
    <div class="row">
        <div class="col-lg-5">

            <?php $form = ActiveForm::begin(); ?>
                <?= $form->field($model, 'username')->textInput() ?>
                <?= $form->field($model, 'email') ?>
                <?= $form->field($model, 'password')->passwordInput() ?>
                <div class="form-group">
                    <?= Html::submitButton('Signup', ) ?>
                </div>
            <?php ActiveForm::end(); ?>

        </div>
    </div>
</div>

И последнее, что необходимо сделать — это добавить регистрацию в меню. Открываем файл /views/layouts/main.php находим виджет меню и добавляем пункт регистрации, после чего виджет с такого вида:

<?php
NavBar::begin(,
]);

echo Nav::widget(,
    'items' => [
        ['label' => 'Home', 'url' => ['/site/index']],
        ['label' => 'About', 'url' => ['/site/about']],
        ['label' => 'Contact', 'url' => ['/site/contact']],
        Yii::$app->user->isGuest ? (
            ['label' => 'Login', 'url' => ['/site/login']]
        ) : (
            '<li>'
            . Html::beginForm(['/site/logout'], 'post')
            . Html::submitButton(
                'Logout (' . Yii::$app->user->identity->username . ')',
                
            )
            . Html::endForm()
            . '</li>'
        )
    ],
]);

NavBar::end();
?>

Примет вид:

<?php

NavBar::begin(,
]);

$menuItems = [
    ['label' => 'Home', 'url' => ['/site/index']],
    ['label' => 'About', 'url' => ['/site/about']],
    ['label' => 'Contact', 'url' => ['/site/contact']],
];

if (Yii::$app->user->isGuest) {
    $menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];
    $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
} else {
    $menuItems[] = '<li>'
        . Html::beginForm(['/site/logout'], 'post')
        . Html::submitButton(
            'Logout (' . Yii::$app->user->identity->username . ')',
            
        )
        . Html::endForm()
        . '</li>';
}

echo Nav::widget(,
    'items' => $menuItems,
]);

NavBar::end();
?>

Теперь у нас есть регистрация и авторизация в Yii2 basic.

Для полноценного функционала осталось только сделать сброс и восстановление пароля.


С этим читают