Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Yii中的CForm下拉列表名称属性_Yii_Yii Cform - Fatal编程技术网

更改Yii中的CForm下拉列表名称属性

更改Yii中的CForm下拉列表名称属性,yii,yii-cform,Yii,Yii Cform,我用的是Yii,我对一些下拉列表有点问题。 基本上,我使用CForm来显示一些课程的下拉菜单。学生最多可以选择两门课程,对于每门课程选择,学生可以选择第一门和第二门。要求将每个课程选择分别插入数据库中。例如,如果一名学生想学习2门课程,并且想拥有一门第一和第二优先课程,他们会这样选择: 课程一-第一优先 课程一-第二优先 课程二-第一优先 课程二-第二优先 这将在数据库中放入4个新行。课程管理员希望将其显示为包含课程的4个下拉菜单 目前,我只测试课程一的第一和第二优先级,但问题是课程一-优先级一

我用的是Yii,我对一些下拉列表有点问题。 基本上,我使用CForm来显示一些课程的下拉菜单。学生最多可以选择两门课程,对于每门课程选择,学生可以选择第一门和第二门。要求将每个课程选择分别插入数据库中。例如,如果一名学生想学习2门课程,并且想拥有一门第一和第二优先课程,他们会这样选择:

  • 课程一-第一优先
  • 课程一-第二优先
  • 课程二-第一优先
  • 课程二-第二优先
  • 这将在数据库中放入4个新行。课程管理员希望将其显示为包含课程的4个下拉菜单

    目前,我只测试课程一的第一和第二优先级,但问题是课程一-优先级一总是空的,除非为优先级二选择一个值。即使选择了两种不同的课程,优先级一也会得到与优先级二相同的值。我一直在遵循本教程,因为我正在使用向导行为,它使用CForm构建表单

    这是我到目前为止的代码,同样只涉及“课程一”:

    这是来自控制器的相关代码片段:

    // inside controller
    $model = new CourseChoice();
    $form = new CForm('application.views.wizard.ccForm', $model);
    $form['courseOneP1']->model = new CourseChoice();
    $form['courseOneP2']->model = new CourseChoice();
    
    $c1p1 = $form['courseOneP1']->model;
    $c1p2 = $form['courseOneP2']->model;
    
    // Here I am just reading the attributes and exiting for testing
    if ($form->submitted()&& $form->validate()) {
          echo '<pre>';
          print_r($c1p1->attributes);
          print_r($c1p2->attributes);
          echo '</pre>';
          exit;
          ..........
    
    假设我选择了两个课程,一个id为15,另一个id为86,当我打印这两个下拉列表时,我会得到以下结果:

    <div class="row field_course">
      <label for="c1p1">1st Priority</label>
      <select id="c1p1" name="CourseChoice[course]">
    </div>
    <div class="row field_course">
      <label for="c1p2">2nd Priority</label>
      <select id="c1p2" name="CourseChoice[course]">
    </div>
    
    更新

    我一直在深入研究这个问题,当我看到firebug时,我发现两个下拉列表都有相同的名称:

    'course' => array(
         'label' => '2nd Priority',
         'name' => 'course2',
         'type' => 'dropdownlist',
         'id' => 'c1p2',
         'prompt' => 'Select 2nd Priority Course',
         'items' => CHtml::listData(CoursePeriod::model()->with('course')->findAll("year = 2014"), 'id', 'course.course_name'),
    )
    
    
    第一优先
    第二优先
    

    因此,第二个菜单覆盖了第一个菜单。但我怎样才能改变这个?如果我在CForm中为任一子表单更改'course'=>array(..),则不会呈现适用的下拉列表。我已经尝试在表单中添加'name'=>'course1',但没有任何区别。

    您不能设置第二优先级输入元素的名称吗


    只需回答我自己的问题并关闭它,因为它现在已经很旧了,CForm不支持表格输入,需要进行扩展才能实现这一点。可能不是一项大工作,但最终我说服管理层,四个下拉列表设计很糟糕。:-)我使用了一个更灵活的设计,在弹出窗口中显示课程的gridview来选择课程,这对用户来说效果很好,也不太容易混淆


    任何对此问题感兴趣的人都可以看到公开的问题,其中有一个链接,可以查看扩展CForm的可能实现,尽管这是在2009年底发布的。

    你会这么认为,但这似乎没有任何区别。两个select标记仍然具有相同的名称(name=“CourseChoice[course])。奇怪!
    <div class="row field_course">
      <label for="c1p1">1st Priority</label>
      <select id="c1p1" name="CourseChoice[course]">
    </div>
    <div class="row field_course">
      <label for="c1p2">2nd Priority</label>
      <select id="c1p2" name="CourseChoice[course]">
    </div>
    
    'course' => array(
         'label' => '2nd Priority',
         'name' => 'course2',
         'type' => 'dropdownlist',
         'id' => 'c1p2',
         'prompt' => 'Select 2nd Priority Course',
         'items' => CHtml::listData(CoursePeriod::model()->with('course')->findAll("year = 2014"), 'id', 'course.course_name'),
    )