我需要使用yii创建依赖的dropDownLists。因此,我在控制器中创建一个视图和一个动作,如下所示:
视图
<?php
echo "<div class='row'>";
echo $form->labelEx($model, 'id_structure');
echo $form->dropDownList($model, 'id_structure', GxHtml::listDataEx(StructureInformation::model()->findAllAttributes()),
array('ajax' => array('type' => 'POST',
'url' => CController::createUrl('InfoComplementAAjouter/fillTypeList'),
'update' => '#typeDonnee',
'data' => array('id_structure' => 'js:this.value'))
));
echo $form->error($model, 'id_structure');
echo '</div>';
echo "<div class='row'>";
echo $form->labelEx($model, 'type');
echo $form->dropDownList($model, 'type', array(), array('prompt' => 'Sélectionner', 'id' => 'typeDonnee'));
echo $form->error($model, 'type');
echo '<div>';
?>
现在,控制器InfoComplementAAjouterController
中的操作:
public function actionFillTypeList(){
$id_struct = $_POST['InfoComplementAAjouter']['id_structure']; //I get the selected value
$taille = StructureInformation::model()->find('id = ' . (int)$id_struct)->taille; //and then pass it to the StructureInformation model to obtain the attribute taille
//I create two arrays which content will be the options of my dropDownList.
$un = array('text'=> 'Texte', 'radio' => 'Bouton radio', 'dropDownList' => 'Liste déroulante');
$plusieurs = array( 'checkboxlist' => 'Choix multiple',);
//If $taille == 1, I display the contents of $un; if $taille > 1, the content of $plusieurs will be displayed.
if($taille == 1){
foreach ($un AS $value => $name){
$opt = array();
$opt['value'] = $value;
echo CHtml::tag('option', $opt, CHtml::encode($name), true);
}
}
if($taille > 1){
foreach ($plusieurs AS $value => $name){
$opt = array();
$opt['value'] = $value;
echo CHtml::tag('option', $opt, CHtml::encode($name), true);
}
}
die;
}
我注意到该动作未被执行。我不明白为什么。 有人可以帮我解决问题吗?
答案 0 :(得分:0)
我刚看到一个错字:
'upedate' => '#typeDonnee',
应为'update'
尝试先修复它
修改
你有更多小错误/拼写错误
echo $form->dropDownList($model, 'id_structure', GxHtml::listDataEx(StructureInformation::model()->findAllAttributes(),
array('ajax' => array('type' => 'POST',
'url' => CController::createUrl('InfoComplementAAjouter/fillTypeList'),
'update' => '#typeDonnee',
'data' => array('id_structure' => 'js:this.value'))
));
这里你需要关闭括号
=============================================== ==
StructureInformation::model()->findAllAttributes()
findAllAttributes()
中没有CActiveRecord
方法
也许你想使用findAllByAttributes()
,但是你想要传递一些属性。如果这是您的自定义方法,那么您应该解释它是如何工作的,或粘贴代码
编辑2:
$_POST['InfoComplementAAjouter']['id_structure']
尝试访问这样的帖子:
$_POST['id_structure']
我认为你在该结构中发帖
复制你的情况对我来说并不容易,所以我有点在黑暗中拍摄