【问题标题】:Extends User plugin by adding a profile does not render tab either new added fields in OctoberCMS通过添加配置文件扩展用户插件不会在 OctoberCMS 中呈现选项卡或新添加的字段
【发布时间】:2014-12-30 07:14:43
【问题描述】:

我已按照Extending User plugin 截屏视频中的所有步骤进行操作,但由于某种原因,我看不到“个人资料”选项卡和新添加的字段。由于我使用了第二种方法,即简单的方法,这就是我所做的:

  • 在 Alomicuba 命名空间下创建插件和模型等
  • 按照视频中的说明创建文件并对文件进行必要的更改:

    Plugin.php
    
    <?php namespace Alomicuba\Profile;
    
    use System\Classes\PluginBase;
    use RainLab\User\Models\User as UserModel;
    use RainLab\User\Controllers\Users as UsersController;
    
    /**
     * Profile Plugin Information File
     */
    class Plugin extends PluginBase
    {
        public $requires = ['RainLab.User'];
    
        /**
         * Returns information about this plugin.
         *
         * @return array
         */
        public function pluginDetails()
        {
            return [
                'name'        => 'Profile',
                'description' => 'Add extra functionalities for Alomicuba WS by extends RainLab User',
                'author'      => 'DTS',
                'icon'        => 'icon-users'
            ];
        }
    
        public function boot()
        {
            UserModel::extend(function($model){
                $model->hasOne['profile'] = ['Alomicuba\Profile\Models\Profile'];
            });
    
            UsersController::extendFormFields(function ($form, $model, $context){
                if ($model instanceof UserModel)
                    return;
    
                $form->addTabFields([
                    'pinCode' => [
                        'label' => 'PIN',
                        'tab' => 'Profile'
                    ],
                    'phone2' => [
                        'label' => 'Teléfono (2)',
                        'tab' => 'Profile'
                    ],
                    'phone3' => [
                        'label' => 'Teléfono (3)',
                        'tab' => 'Profile'
                    ],
                    'phone4' => [
                        'label' => 'Teléfono (4)',
                        'tab' => 'Profile'
                    ]
                ]);
            });
        }
    }
    
    add_profiles_fields_to_user_table.php
    
    <?php namespace Alomicuba\Profile\Updates;
    
    use Schema;
    use October\Rain\Database\Updates\Migration;
    
    class AddProfilesFieldsToUserTable extends Migration
    {
    
        public function up()
        {
            Schema::table('users', function($table)
            {
                $table->integer('pinCode')->unsigned();
                $table->dateTime('pinCodeDateTime');
                $table->integer('phone2')->unsigned()->nullable();
                $table->integer('phone3')->unsigned()->nullable();
                $table->integer('phone4')->unsigned()->nullable();
            });
        }
    
        public function down()
        {
            $table->dropDown([
                'pinCode',
                'pinCodeDateTime',
                'phone2',
                'phone3',
                'phone4'
            ]);
        }
    }
    
    version.yaml
    1.0.1: First version of Profile
    1.0.2:
        - Created profiles table
        - create_profiles_table.php
        - add_profiles_fields_to_user_table.php
    
    Profile.php (Model)
    <?php namespace Alomicuba\Profile\Models;
    
    use Model;
    
    /**
     * Profile Model
     */
    class Profile extends Model
    {
        /**
         * @var string The database table used by the model.
         */
        public $table = 'alomicuba_profile_profiles';
    
        /**
         * @var array Relations
         */
        public $belongsTo = [
            'user' => ['RainLab\User\Models\User']
        ];
    
    
        // This method is not need anymore since I'll use the second approach
        public static function getFromUser($user)
        {
            if ($user->profile)
                return $user->profile;
    
            $profile = new static;
            $profile->user = $user;
            $profile->save();
    
            $user->profile = $profile;
    
            return $profile;
        }
    }
    

但是当我编辑现有用户时,我没有看到“个人资料”选项卡,也没有看到任何新添加的字段。见下图:

对此有什么建议吗?我错过了什么吗?

我还有一些关于插件扩展的问题:

  1. 如何在注册表单中添加必填字段?
  2. 如何在帐户表单上显示每个新添加的字段?

【问题讨论】:

    标签: php laravel laravel-4 octobercms


    【解决方案1】:

    我已经在你需要编写的机器上测试了你的代码

    $require 而不是 plugin.php 中的$requires

    请查看文档

    http://octobercms.com/docs/plugin/registration#dependency-definitions

    当为 UserController 调用 extendFormFields() 方法时,您需要指定您只想为 UserModel 扩展字段,而不是为其他字段扩展

    if (!$model instanceof UserModel)
        return;
    

    所以 plugin.php 代码看起来像这样

    <?php namespace Alomicuba\Profile;
    
    use System\Classes\PluginBase;
    use RainLab\User\Models\User as UserModel;
    use RainLab\User\Controllers\Users as UsersController;
    
    /**
     * Profile Plugin Information File
     */
    class Plugin extends PluginBase
    {
        public $require = ['RainLab.User'];
    
        /**
         * Returns information about this plugin.
         *
         * @return array
         */
        public function pluginDetails()
        {
            return [
                'name'        => 'Profile',
                'description' => 'Add extra functionalities for Alomicuba WS by extends RainLab User',
                'author'      => 'DTS',
                'icon'        => 'icon-users'
            ];
        }
    
        public function boot()
        {
            UserModel::extend(function($model){
                $model->hasOne['profile'] = ['Alomicuba\Profile\Models\Profile'];
    
            });
    
            UsersController::extendFormFields(function ($form, $model, $context){
                if (!$model instanceof UserModel)
                    return;
    
                $form->addTabFields([
                    'pinCode' => [
                        'label' => 'PIN',
                        'tab' => 'Profile'
                    ],
                    'phone2' => [
                        'label' => 'Teléfono (2)',
                        'tab' => 'Profile'
                    ],
                    'phone3' => [
                        'label' => 'Teléfono (3)',
                        'tab' => 'Profile'
                    ],
                    'phone4' => [
                        'label' => 'Teléfono (4)',
                        'tab' => 'Profile'
                    ]
                ]);
            });
        }
    }
    

    并在 add_profiles_fields_to_user_table.php

    要删除列,请编写以下代码

    Schema::table('users', function($table)
    {
            $table->dropDown([
                'pinCode',
                'pinCodeDateTime',
                'phone2',
                'phone3',
                'phone4'
            ]);
    }
    

    【讨论】:

    • 我认为 dropDown 在最新版本的 laravel 中已重命名为 dropColumn。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2017-04-25
    相关资源
    最近更新 更多