有人知道如何从CakePHP中的不同视图中选择一个拍摄的内容吗?
我的帖子itemgroups
有2个字段ID
和Description
。我需要在项目添加页面中创建一个下拉列表,但是我找不到将另一个表中的所有值放入数组以放入页面的好方法。
下面我还列出了每个模型。
<?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'
)
);
}
?>
答案 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 SET
或ENUM
类型
*
* @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>')?>