如何从Rainlab实现User Plus +插件的定位功能?

时间:2019-01-27 07:45:02

标签: octobercms octobercms-plugins octobercms-backend

我已经从位置插件的前端实现了“国家/地区选择表格”和“国家/地区选择表格”。根据“位置”的后端设置填充值。但是,如果我单击“注册”,则不会保存国家和州。

首先,我认为这是一个可填充的问题,因为不会引发任何错误。然后,我查看了代码,意识到位置插件的文档指出行为控制器向实现的模型(州和国家)添加了两个新关系。在查看位置插件的代码示例时,我注意到选择表单字段分别命名为“ country_id”和“ state_id”。我已将它们更改为国家和州,因此用户模型选择了由“位置行为”创建的关系,但仍然没有运气。字段未保存。我在做什么错了?

部分网站/country-state-horizo​​ntal.htm

 {% set countryId = countryId|default(form_value('country')) %}
 {% set stateId = stateId|default(form_value('state')) %}
 <div class="uk-margin">
     <div class="uk-margin">
         <label class="uk-form-label" for="accountCountry">{{ 'Land'|_      }}</label>
         <div class="uk-form-controls">
             {{ form_select_country('country', countryId, {
             id: 'accountCountry',
             class: 'uk-select',
             emptyOption: '',
             'data-request': 'onInit',
             'data-request-update': {
             'site/country-state-horizontal': '#partialCountryState'
             }
             }) }}
         </div>
     </div>
 </div>

 <div class="uk-margin">
     <label class="uk-form-label" for="accountState">{{ 'Bundesland'|_      }}</label>
     <div class="uk-form-controls">
         {{ form_select_state('state', countryId, stateId, {
         id: 'accountState',
         class: 'uk-select',
         emptyOption: ''
         }) }}
     </div>
 </div>

编辑:

部分片段/intro.htm

    <form 
     data-request="onRegister"
     class="uk-form-horizontal uk-margin-large">
          <div class="uk-margin">
               <label class="uk-form-label" for="registerName">Vorname</label>
               <div class="uk-form-controls">
                    <input
                            name="name"
                            type="text"
                            class="uk-input"
                            id="registerName"
                            placeholder="Bitte deinen Vornamen eingeben" />
               </div>
          </div>

           <div class="uk-margin">
                <label class="uk-form-label" for="registerSurname">Nachname</label>
                <div class="uk-form-controls">
                   <input name="surname" type="text" class="uk-input" id="registerSurame" placeholder="Bitte deinen Nachnamen eingeben" />
                </div>
           </div>

 .....

           <div id="partialCountryState">
                {% partial 'site/country-state-horizontal' countryId=user.country_id stateId=user.state_id %}
           </div>

 .....

           <div class="uk-margin">
                <button type="submit" class="uk-button uk-button-primary">Registrieren</button>
           </div>

预期:表单在为国家和州注册时为用户保存ID 实际:字段为空

1 个答案:

答案 0 :(得分:0)

我阅读了插件,发现其general plugin是为了使其与users plugin 兼容,我们需要在其中添加一些额外的代码

  
      
  1. 在表中添加所需字段(手动)
  2.   

我们需要手动将country_idstate_id添加到表users

您可以通过从builder plugin and apply that. make sure it stays country_id和state_id [ in your case you tried to change them if that so just revert back and add postfix _ id`]创建新版本文件来添加它们

<?php namespace HardikSatasiya\SoTest\Updates;

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

class Migration1013 extends Migration
{
    public function up()
    {
        Schema::table('users', function($table)
        {
            $table->integer('country_id')->unsigned()->nullable()->index();
            $table->integer('state_id')->unsigned()->nullable()->index();
        });
    }

    public function down()
    {
        // Remove fields
    }
}
  
      
  1. 现在在插件的boot方法中添加此代码
  2.   
<?php namespace HardikSatasiya\SoTest;

// ... 
use RainLab\User\Models\User as UserModel;

class Plugin extends PluginBase
{

    public function boot() {

      UserModel::extend(function ($model) {
        $model->implement[] = 'RainLab.Location.Behaviors.LocationModel';
        $model->addFillable([
            'country_id',
            'state_id',
        ]);
      });

    // ...

现在,只需尝试保存您应保存country and state的数据,即可使用

进行检索
echo $userModel->country_code; // US
echo $userModel->state_code; // FL

echo $userModel->country_id; // 10 respective id
echo $userModel->state_id; // 22 respective id

已安装User Plus(+)插件

  

不确定是否使用User Plus(+)插件,但由于进行了https://github.com/rainlab/location-plugin/commit/6360a319f1e1e3eff8b6a43e85bdfdf3f84fbb58 fillable is not working properly的提交,因此我调试并发现了一些问题。

因此,我们可以尝试再次手动将其添加。

<?php namespace HardikSatasiya\SoTest;

// ... 
use RainLab\User\Models\User as UserModel;

class Plugin extends PluginBase
{

    public function boot() {    
      UserModel::extend(function ($model) {            
        $model->addFillable([
            'country_id',
            'state_id',
        ]);
      });

如有疑问,请发表评论。