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

qlfbtfca  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(133)

我正在尝试从使用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是我希望用户从中选择的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框架的新手。

gg58donl

gg58donl1#

你能检查为什么你的开发工具显示以下请求URI吗?
我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,
我认为这应该看起来像:
资本设置/获取建筑物?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'));
}

相关问题