CakePHP中的下拉列表选择列表

时间:2009-09-20 06:40:40

标签: cakephp

有人知道如何从CakePHP中的不同视图中选择一个拍摄的内容吗?

我的帖子itemgroups有2个字段IDDescription。我需要在项目添加页面中创建一个下拉列表,但是我找不到将另一个表中的所有值放入数组以放入页面的好方法。

下面我还列出了每个模型。

<?php

class Item extends AppModel
{
    var $name = 'Item';
    var $belongsTo = 'Itemgroup';
}

?>


    

class Itemgroup extends AppModel
{
    var $name = 'Itemgroup';
    var $hasOne = array('Item');
    var $validate = array(
        'description' => array(
            'rule' => 'notEmpty'
        ),
        'description' => array(
            'rule' => 'notEmpty'
        )
    );
}

?>

10 个答案:

答案 0 :(得分:23)

假设您的模型是用户,并且您要使用的字段是美国州的列表(例如)......

在您的控制器中:

$this->set('states',$this->State->find('list'));

并在您看来:

<?php echo $form->input('User.state',array('type'=>'select','options'=>$states)); ?>

答案 1 :(得分:4)

以下是显示选择下拉列表的代码。

<?php echo $form->input('inputname', array('type'=>'select', 'options'=>$cate, 'label'=>false, 'empty'=>'Category')); ?>

其中$ cate使用格式

中的find('list')加载数组

数组(0 =&gt;'option1',1 =&gt;'option2'等等等

答案 2 :(得分:4)

<?php 
    $arrCategory=array(1=>"Car",2=>"Boat",3=>"Bike");
    echo $form->input('inputname', array('options'=>$arrCategory, 'label'=>false,
                                  'empty'=>'Category','selected'=>'Your Value')); 
?>

答案 3 :(得分:1)

请使用

    //In controller
    $data=$this->Model->find('list');
    $this->set('data',$data);

在视图中:

    $this->Form->input('list',array("options"=>$data));

答案 4 :(得分:1)

您可以在控制器中使用这样的内容并查看...

//In Controller:
    $data=$this->Model->find('list',array('conditions'=>array()));
    $this->set('data',$data);

//In View:

    echo $this->Form->select('field_name',$data,null,array("escape"=>false,"empty"=>"select"));

如果要在下拉列表中初始显示选择值,则可以在上面的行中使用null传递值。

答案 5 :(得分:1)

在控制器中:

$Itemgroup = $this->Itemgroup->find('list',
  array(
    'fields' => array('ID','Description')
  )
);

$this->set('Itemgroup',$Itemgroup); 

在视图中:

$form->input('itemgroup_id', array('type' => 'select','options'=> $Itemgroup));

答案 6 :(得分:0)

如果它类似于“美国国家”下拉列表,将在页面之间重复,请考虑使用Element,您只需将数据传递给您,您就不必重复所有再次使用UI代码。

答案 7 :(得分:0)

在我看来,这是正确的解决方案: 选择from column SETENUM类型

* 
* @param string $sColumn - col name
* @param string $sTable - if use other table as Model
* @return array 
*/
function fGetArrayFromSQLSet($sColumn, $sTable=null) {

    # Pokud neni urcena tabulka, pouzij tabulku modelu
    if( !$sTable ) {
        $sTable= $this->useTable;
    }

    # Nacti nastaveni daneho pole dane tabulky
    $tmpHlaseno=$this->query("SELECT COLUMN_TYPE
                    FROM information_schema.columns
                    WHERE TABLE_NAME = '$sTable'
                        AND COLUMN_NAME = '$sColumn'
        "); //db($tmpHlaseno);
    $tmpList= $tmpHlaseno[0]['columns']['COLUMN_TYPE']; 

    # Ziskej hodnoty z nastaveni a uloz je do pole
    $sTmp= str_replace(')', '', str_replace('set(', '', str_replace('enum(', '', $tmpList)));
    $aTmp= explode(',', str_replace("'", '', $sTmp));
    foreach( $aTmp as $value ) {
        $aSetList[$value]= $value;
    }   //db($aSetList);

    return $aSetList;   
}       // END of fGetArrayFromSQLSet 

答案 8 :(得分:0)

使用CakePHP 3.6

$fruits = ['1'=>'orange','2'=>'melon','3'=>'lemon','4'=>'apple'];
echo $this->Form->control('Fruit', ['options'=>$fruits, 'label'=>"select your fruit", 'value'=>'lemon']);

默认情况下,您的下拉列表将带有“柠檬”选项。

此代码将产生以下html:

<div class="input select">
  <label for="Fruit">select your fruit</label>
  <select name="Fruit" id="Fruit">
    <option value="1">orange</option>
    <option value="2">melon</option>
    <option value="3">lemon</option>
    <option value="4">apple</option>
  </select>
</div>

您可以在此处找到更多信息:
https://book.cakephp.org/3.0/en/views/helpers/form.html#options-for-select-checkbox-and-radio-controls

答案 9 :(得分:-7)

或者你可以使用它:

在模特:

/**
* Get list of choises from collumn SET or ENUM type
* 
* @param string $sColumn - col name
* @param string $sTable - if use other table as Model
* @return array 
*/
function fGetArrayFromSQLSet($sColumn, $sTable=null) {

    # Pokud neni urcena tabulka, pouzij tabulku modelu
    if( !$sTable ) {
        $sTable= $this->useTable;
    }

    # Nacti nastaveni daneho pole dane tabulky
    $tmpHlaseno=$this->query("SELECT COLUMN_TYPE
                    FROM information_schema.columns
                    WHERE TABLE_NAME = '$sTable'
                        AND COLUMN_NAME = '$sColumn'
        "); //db($tmpHlaseno);
    $tmpList= $tmpHlaseno[0]['columns']['COLUMN_TYPE']; 

    # Ziskej hodnoty z nastaveni a uloz je do pole
    $sTmp= str_replace(')', '', str_replace('set(', '', str_replace('enum(', '', $tmpList)));
    $aTmp= explode(',', str_replace("'", '', $sTmp));
    foreach( $aTmp as $value ) {
        $aSetList[$value]= $value;
    }   //db($aSetList);

    return $aSetList;   
}       // END of fGetArrayFromSQLSet 

在控制器中:

# TB ENUM fields 
$aFields= array('order', '<TB_col_SET_type>', '<TB_col_SET_type>', .... ); 
    foreach ($aFields as $sFieldName ) {
        $this->set(Inflector::pluralize(Inflector::variable($sFieldName)),  $this->PHlaseni->fGetArrayFromSQLSet($sFieldName) ); 
    }

在视野中应该:

<?=$form->input('order')?>
<?=$form->input('<TB_col_SET_type>')?>