我已经从位置插件的前端实现了“国家/地区选择表格”和“国家/地区选择表格”。根据“位置”的后端设置填充值。但是,如果我单击“注册”,则不会保存国家和州。
首先,我认为这是一个可填充的问题,因为不会引发任何错误。然后,我查看了代码,意识到位置插件的文档指出行为控制器向实现的模型(州和国家)添加了两个新关系。在查看位置插件的代码示例时,我注意到选择表单字段分别命名为“ country_id”和“ state_id”。我已将它们更改为国家和州,因此用户模型选择了由“位置行为”创建的关系,但仍然没有运气。字段未保存。我在做什么错了?
部分网站/country-state-horizontal.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 实际:字段为空
答案 0 :(得分:0)
我阅读了插件,发现其general plugin
是为了使其与users plugin
兼容,我们需要在其中添加一些额外的代码。
- 在表中添加所需字段(手动)
我们需要手动将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(+)插件,但由于进行了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',
]);
});
如有疑问,请发表评论。