Я хочу добавить еще несколько полей в моем администратор бэкэнда создав свой собственный плагин под названием пользователей. Вот что я сделал, чтобы создать несколько новых полей.
плагины \ 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
,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';
}
Но проверки тоже не работают. Как я могу проверить это поле, если кто-то выбрал «Консультант по недвижимости» из роли пользователя?
Много вопросов, но мне нужен лучший способ подойти к этой проблеме. Кто-нибудь может направить меня, чтобы заставить эту вещь работать?
Спасибо
мне нужно вручную добавить поле 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
)};
}
Других решений пока нет …