Как реализовать функцию определения местоположения плагина User Plus + от Rainlab? - PullRequest
0 голосов
/ 27 января 2019

Я реализовал форму выбора страны и форму выбора состояния в моем интерфейсе из плагина местоположения. Значения заполняются в соответствии с внутренними настройками Location. Но если я нажму на регистр, страна и штат не будут сохранены.

Сначала я подумал, что это проблема с ошибками, потому что никаких ошибок не возникает. Затем я изучил код и понял, что в документации к плагину Location говорится, что контроллер поведения добавляет два новых отношения к реализованной модели (штат и страна). Глядя на пример кода для плагина местоположения, я заметил, что поля формы выбора имеют названия 'country_id' и 'state_id'. Я изменил их на страну и штат, поэтому пользовательская модель выбирает отношение, созданное поведением местоположения, но все равно не повезло. Поля не сохранены. Что я делаю не так?

частичный сайт / страна-штат-горизонтальный.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>

EDIT:

частичные фрагменты / 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>

Ожидается: форма сохраняет идентификаторы для пользователя при регистрации для страны и штата Фактически: поля остаются пустыми

1 Ответ

0 голосов
/ 29 января 2019

Я прочитал плагин и обнаружил, что его general plugin, чтобы сделать его совместимым * от 1003 * до users plugin, нам нужно добавить туда дополнительный код .

  1. Добавить необходимые поля в таблицу (вручную)

нам нужно вручную добавить country_id и state_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
    }
}
Теперь в методе вашего плагина boot добавьте этот код
<?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',
        ]);
      });

если есть сомнения, прокомментируйте.

...