OctoberCMS добавляет поля администратора бэкенда с проверкой

Я хочу добавить еще несколько полей в моем администратор бэкэнда создав свой собственный плагин под названием пользователей. Вот что я сделал, чтобы создать несколько новых полей.

плагины \ technobrave \ Users \ plugin.php

<?php namespace Technobrave\Users;

use System\Classes\PluginBase;
use Backend\Models\User as BackendUserModel;
use Backend\Controllers\Users as BackendUsersController;
class Plugin extends PluginBase
{
public function registerComponents()
{
}

public function registerSettings()
{
}

public function boot()
{
// Add college and teacher field to Users table
BackendUserModel::extend(function($model){
$model->belongsTo['team'] = ['technobrave\team\Models\Team'];

});// Add college and teacher field to Users form
BackendUsersController::extendFormFields(function($form, $model, $context){

if (!$model instanceof BackendUserModel)
return;

$form->addTabFields([
'team' => [
'label'   => 'Team',
'comment' => 'Associate this user with a team.',
'type' => 'recordfinder',
'list' => '$/technobrave/team/models/team/columns.yaml',
'prompt' => 'Click the %s to find a team',
'select' => 'id',
'nameFrom'=> 'name',
'tab' => 'Account'
]
]);
});
}
}

плагины \ technobrave \ Пользователи \ модели \ User.php

<?php namespace Technobrave\Users\Models;

use Model;/**
* Model
*/
class User extends Model
{use \October\Rain\Database\Traits\Validation;

/*
* Validation
*/
public $rules = [
'team_id' => 'required',

];

public $customMessages = [
'team_id.required' => 'Please select Team',];

/**
* @var string The database table used by the model.
*/
public $table = 'backend_users';
}

А теперь вот как мой администратор страница выглядит так.

введите описание изображения здесь

И если я нажму на «Team Recordfinder», я смогу увидеть, как показано ниже.

введите описание изображения здесь

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

введите описание изображения здесь

Как видите, пока все работает нормально. Но как только я заполняю полную форму, я получаю эту ошибку SQL, говорящую, что столбец не найден. Как ниже.

«SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец ‘team_id’ в ‘списке полей’ (SQL: вставить в backend_users (is_superuser, login, email, first_name, last_name, password, persist_code, permissions, team_id, updated_at, created_at) значения (0, Johny, [email protected], Johny, Cook, y $ bbr00J5O2dE1WDHHWZYHIeMduXI82HkDnE8IYBcAet4ie0nfpgpwq,,, 9, 2017-05-19 06:23:49, 2017-05-19 06:23:49) on строка 666 из C: \ xampp \ htdocs \ slp_website_cms \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php

введите описание изображения здесь

Теперь мой вопрос мне нужно добавить team_id поле вручную в backend_users Таблица ? Это правильный путь? Я не уверен.

Кроме того, я хочу сделать проверки для этого конкретного поля, поэтому я сделал ниже.

плагины \ technobrave \ Пользователи \ модели \ User.php

<?php namespace Technobrave\Users\Models;

use Model;/**
* Model
*/
class User extends Model
{use \October\Rain\Database\Traits\Validation;

/*
* Validation
*/
public $rules = [
'team_id' => 'required',

];

public $customMessages = [
'team_id.required' => 'Please select Team',];

/**
* @var string The database table used by the model.
*/
public $table = 'backend_users';
}

Но проверки тоже не работают. Как я могу проверить это поле, если кто-то выбрал «Консультант по недвижимости» из роли пользователя?

Много вопросов, но мне нужен лучший способ подойти к этой проблеме. Кто-нибудь может направить меня, чтобы заставить эту вещь работать?

Спасибо

0

Решение

мне нужно вручную добавить поле team_id в таблицу backend_users? Это правильный путь? Я не уверен.

Да, вам нужно создать миграцию, чтобы добавить это поле в таблицу.

Для добавления правил проверки вы также можете расширить модель:

public function boot() {
BackendUserModel::extend(function($model){
$myrules = $model->rules;
$myrules['team_id'] = 'required';
$model->rules = $myrules;
});
}

Для входа в систему вы можете использовать App :: before

public function boot() {
\App::before(function() {
// Here BackendAuth::getUser() is already initialized
)};
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]