OctoberCMS添加后端管理员字段并进行验证

时间:2017-05-19 06:32:02

标签: php octobercms octobercms-backend octobercms-plugins october-form-controller

我想通过创建名为用户的自己的插件,在我的后端管理员中添加更多字段。以下是我迄今为止创建的几个新领域所做的工作。

插件\ technobrave \用户\ 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'
                ]
            ]);
        });
    }
}

plugins \ technobrave \ users \ models \ 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';
}

现在这就是我的管理员页面的样子。

enter image description here

如果我点击“Team Recordfinder”,我可以看到如下。

enter image description here

如果我从列表中选择任何团队记录,它看起来如下。

enter image description here

到目前为止,你可以看到所有工作正常。但是只要我填写完整的表单,我就会收到这个SQL错误,说找不到列。如下。

  

“SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'team_id'(SQL:插入backend_usersis_superuserlogin,{{1 }},emailfirst_namelast_namepasswordpersist_codepermissionsteam_idupdated_at )值(0,Johny,johny @ mailinator.com,Johny,Cook,y $ bbr00J5O2dE1WDHHWZYHIeMduXI82HkDnE8IYBcAet4ie0nfpgpwq ,,, 9,2017-05-19 06:23:49,2017-05-19 06:23:49))“on C:\ xampp \ htdocs \ slp_website_cms \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php

的第666行

enter image description here

现在,我的问题是,我是否需要在 backend_users 表中手动添加created_at字段?这是有效的方式吗?我不确定。

此外,我想对此特定字段进行验证,因此我在下面进行了验证。

插件\ technobrave \用户\模型\ user.php的

team_id

但验证也不起作用。如果某人从用户角色选中了“Property Consultant”,我该如何验证此字段?

很多问题,但我需要一个最好的方法来解决这个问题。有人可以指导我让这件事有用吗?

谢谢

1 个答案:

答案 0 :(得分:1)

  

我是否需要在backend_users表中手动添加team_id字段?这是有效的方式吗?我不确定。

是的,您需要创建迁移以将此字段添加到表中。

要添加验证规则,您还可以扩展模型:

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

要登录用户,您可以使用App ::之前的

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