RainLab User – полулярный плагин для управления пользователями фронтенда в OctoberCMS. В плагине у пользователей имеется минимальный набор полей – фамилия, имя, почта и группа пользователей. Но очень легко можно добавить нужные поля из своего плагина.

Для начала создадим нужные поля в БД, для этого создаем новую версию/миграцию (файл /updates/version.yaml в папке плагина):

1.3.37:
- 'Updated table users'
- update_users_add_new_field.php

Файл миграции (нужно указать нужный тип поля, для примера строка из одного символа) /updates/update_users_add_new_field.php в папке плагина:

<?php namespace YourPluginNamespace\PluginName\Updates;

use Schema;
use October\Rain\Database\Updates\Migration;

class UpdateUsersAddNewField extends Migration
{
    public function up()
    {
        Schema::table('users', function($table)
        {
            $table->string('new_field', 1);
        });
    }

    public function down()
    {
        Schema::table('users', function($table)
        {
            $table->dropColumn('new_field');
        });
    }
}

Запускаем миграцию в консоли:

php artisan october:up

Расширяем модель UserModel и добавляем поля на форму редактирования и просмотра пользователя (UsersController) в /Plugin.php в папке плагина:

//...
use RainLab\User\Controllers\Users as UsersController;
use RainLab\User\Models\User as UserModel;
//...
class Plugin extends PluginBase
{
    //...
    public function boot()
    {
        UserModel::extend(function($model)
        {
            $model->addFillable([
                'new_field',
            ]);
        });

        UsersController::extendFormFields(function($form, $model, $context)
        {
            if (!$model instanceof UserModel) {
                return;
            }

            $form->addTabFields([
                'new_field' => [
                    'label' => 'New Field',
                    'tab'   => 'New Tab Name',
                    'span'  => 'auto'
                ],
            ]);
        });
    }
    //...
}

Готово, можем работать с новым полем обычным способом:

$user = \Auth::getUser();
$user->new_field = 'Y';
$user->save();