【问题标题】:CakePHP select default value in SELECT inputCakePHP 在 SELECT 输入中选择默认值
【发布时间】:2009-10-09 19:57:08
【问题描述】:

使用 CakePHP:

我有一个多对一的关系,让我们假设它是多叶树。当然,我烘焙了一个表单,将叶子添加到树中,您可以通过表单助手创建的下拉框(标签)来指定它是哪棵树。

唯一的问题是,SELECT 框始终默认为树 #1,但我希望它默认为要添加到的树:

例如,调用example.com/leaf/add/5 将调出界面以向树#5 添加一个新叶子。 Leaf.tree_id 的下拉框将默认为“树 5”,而不是当前默认的“树 1”。

我需要在我的 Leaf 控制器和 Leaf view/add.ctp 中放入什么来执行此操作?

【问题讨论】:

    标签: php cakephp relationships helpers cakephp-2.x


    【解决方案1】:

    在 CakePHP 1.3 中,使用 'default'=>value 在选择输入中选择默认值:

    $this->Form->input('Leaf.id', array('type'=>'select', 'label'=>'Leaf', 'options'=>$leafs, 'default'=>'3'));
    

    【讨论】:

    • 为什么这没有被标记为答案?这是正确的一个(另一个可能是一个建议,但这是关于这个问题的真正答案!)
    • 这在 cake 1.2 中也是正确的。为了阻止自己发疯-不要只是刷新页面以查看默认值是否有效(它将保留选择的任何值),您需要返回一个页面并再次重新单击该页面(或转到点击地址栏并回车)
    【解决方案2】:

    你永远不应该使用select(),或text(),或radio()等;这是可怕的做法。你应该使用input():

    $form->input('tree_id', array('options' => $trees));
    

    然后在控制器中:

    $this->data['Leaf']['tree_id'] = $id;
    

    【讨论】:

    • 我不确定“糟糕的做法”
    • 你能解释一下吗?变量$tree 在哪里定义? $options 不应该是一个数组,键是选项的类型吗?
    • 相信他所说的 Miles,这是一种可怕的做法,我花了 2:00 小时的时间用 $this->Form->Select 设置 Cake 的“after”属性() 并且它不能正常工作。为了节省宝贵的时间,请使用 $this->Form->input 作为 Select。
    • 同意;不管出于什么原因,cakePHP 完全不关心 select()。
    • 输入有时间,选择有时间。
    【解决方案3】:
     $this->Form->input('Leaf.id', array(
    'type'=>'select',
    'label'=>'Leaf',
    'options'=>$leafs,
    'value'=>2
    ));
    

    这将从 $leafs 中的选项列表中选择默认的第二个索引位置值。

    【讨论】:

      【解决方案4】:

      第三个参数应该是array('selected' =>value)

      【讨论】:

      • 这仅在您希望始终选择该值时使用
      【解决方案5】:

      假设您正在使用表单助手来生成表单:

      select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)
      

      设置第三个参数设置选中的选项。

      【讨论】:

      • 嘿,我有以下代码: $options=array('1'=>'opt1','2'=>'opt2','3'=>'opt3'); echo $form->select('Fieldname',$options , ??? ,array(),false);设置所选项目的第三个参数的格式是什么?我似乎无法正确处理。
      • 应该是选中选项的值
      • 这是哪个版本的 CakePHP - 我在 1.1、1.2 或 1.3 中都找不到相关文档?
      【解决方案6】:

      cakephp 版本 >= 3.6

      echo $this->Form->control('field_name', ['type' => 'select', 'options' => $departments, 'default' => 'your value']);
      

      【讨论】:

        【解决方案7】:

        要在选择框中设置文本默认值,请使用$form->select() 方法。这是你的做法。

        $options = array('m'=>'Male','f'=>'Female','n'=>'neutral');
        
        $form->select('Model.name',$options,'f');
        

        以上代码默认会在列表框中选择Female

        继续烘烤...

        【讨论】:

          【解决方案8】:
          FormHelper::select(string $fieldName, array $options, 
          array $attributes)
          

          $attributes['value'] 设置默认选择哪个值

          <?php echo $this->Form->select('status', $list, array(
              'empty' => false, 
              'value' => 1)
          ); ?>
          

          【讨论】:

            【解决方案9】:

            如果您使用的是 cakephp 3.0 及以上版本,则可以使用以下示例中给出的空属性在选择输入中添加默认值。

            echo $this->Form->input('category_id', ['options'=>$categories,'empty'=>'Choose']);
            

            【讨论】:

              【解决方案10】:

              最好的答案可能是

              不要对这项工作使用 selct 而是使用输入

              喜欢这个

              echo  $this->Form->input('field_name', array(
                        'type' => 'select',
                          'options' => $options_arr, 
                          'label' => 'label here',
                          'value' => $id,  // default value
                          'escape' => false,  // prevent HTML being automatically escaped
                          'error' => false,
                          'class' => 'form-control' // custom class you want to enter
                      ));
              

              希望对你有帮助。

              【讨论】:

                【解决方案11】:

                在 CakePHP 4.2 中,带有默认值的选择表单元素的正确语法非常简单:

                echo $this->Form->select(
                                'fieldname',
                                ['value1', 
                                'value2', 
                                'value3'], 
                                ['empty' => '(auswählen)','default'=>1]
                            );
                

                如果希望不需要解释 default=1 表示第二个值,default=0 表示第一个值。 ;)

                选择值时要非常小心,因为它可能会有些棘手。上面的示例没有选择字段的特定值,因此其值会自动计算。如果您为每个选择列表条目设置了特定值,并且想要一个默认值,请设置其特定值:

                $sizes = ['s' => 'Small', 
                'm' => 'Medium', 
                'l' => 'Large'];
                echo $this->Form->select('size', $sizes, ['default' => 'm']);
                

                这个例子来自官方的 4.x Strawberry Cookbook。 https://book.cakephp.org/4/en/views/helpers/form.html#options-for-control

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-03-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-08-09
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多