无法从 yii 中的模型中获取匹配的行

Cannot get matched row from model in yii

我正在尝试从使用 select2 的用户输入中获取相关行。我正在关注 this 教程,了解如何操作,但现在我无法获取匹配的行。 这是 select2 以获取用户的输入:

<?= $form->field($model, 'kod_bangunan')->widget(Select2::classname(), [
                    'data' => ArrayHelper::map(
                        KodModal::find()
                            ->select('kod_bangunan, kod_bangunan')
                            ->where(['aktif' => 'Y'])
                            ->asArray()
                            ->all(), 'kod_bangunan', 'kod_bangunan'
                        ),
                    'language' => 'en',
                    'options' => ['placeholder' => '-- PLEASE SELECT --', 'class' => 'form-control'],
                    'pluginOptions' => [
                        'allowClear' => true,
                        'initialize' => true,
                    ],
                ]);

            ?>

所以 kod_bangunan 是我希望用户 select 来自的 ID。 KodModal 是我的数据库 kod_modal.

的模型

这是我的 javascript,我把它和上面的代码放在同一个文件里 _capital.php 路径是

backend/views/capital-setting/_capital.php

<?php
$script = <<< JS
//here right all javascript 

$('#kodmodal-kod_bangunan').change(function(){
   //kod_bangunan holds the value that is the building code selected
   var kod_bangunan = $(this).val();
   $.get('index.php?r=capitalsetting/get-for-building',{ kod_bangunan : kod_bangunan }, function(data){
       alert(data);
   });
});

JS;
$this->registerJs($script);
?>

这是我的控制器文件 CapitalSettingController.php 路径是

backend/controllers/CapitalSettingController.php

public function actionGetForBuilding($kod_bangunan){
    $KodModal = KodModal::findOne(['kod_bangunan'=>$kod_bangunan]);
    echo Json::encode($KodModal);
}

所以当我从 select2 中选择一个 kod bangunan 时,它应该提醒与 kod_bangunan 匹配的行中的数据。但现在它在控制台上显示错误。这是错误截图

请帮忙,我是 Yii 框架的新手。

您能检查一下为什么您的开发者工具显示以下请求 uri 吗?

capital-setting/index.php?r=kod_modal/capitalsetting/get-for-building&kod_bangunan=008

我认为这应该是这样的:

capital-setting/get-for-building?kod_bangunan=008

所以尝试用 yii 方法创建 url:

$url = Url::to(['capital-setting/get-for-building']);
<?php
$script = <<< JS
//here right all javascript 

$('#kodmodal-kod_bangunan').change(function(){
   //kod_bangunan holds the value that is the building code selected
   var kod_bangunan = $(this).val();
   $.get('$url',{ kod_bangunan : kod_bangunan }, function(data){
       alert(data);
   });
});

JS;
$this->registerJs($script);
?>
  1. 选项是使用 pjax

在您看来:

<?= $form->field($model, 'kod_bangunan')->widget(Select2::class, [
    ...
    'pluginEvents' => [
        "select2:select" => <<<JS
function onSelect() {
    $.pjax({
    type: 'POST',
    container: '#partial-form-pjax',
    data: $('form').serialize()
    })
}
JS
        ,
    ],
]); ?>


<?php Pjax::begin(['id' => 'partial-form-pjax']) ?>

<?= $form->field($model, 'building_kod')->textInput(); ?>

<?= $form->field($model, 'name_building')->textInput(); ?>

<?php Pjax::end() ?>

在你的控制器中:

if (Yii::$app->request->isPjax && $model->load(Yii::$app->request->post())) {
    $KodModal = KodModal::findOne(['kod_bangunan'=>$kod_bangunan]);
    $model->kod_building = $KodModal->kod_building;
    $model->name_building = $KodModal->name_building;
    return $this->render('[same view]', compact('model'));
}