Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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
CakePhp有很多很多下拉列表_Php_Cakephp - Fatal编程技术网

CakePhp有很多很多下拉列表

CakePhp有很多很多下拉列表,php,cakephp,Php,Cakephp,我有一个巨大的表格,我将分成几个部分。每个部分都有自己的模型。我有大量的下拉列表。它们有点类似,所以我想做的是能够通过调用php变量向它们添加选项。这将确保我没有打字错误,如果需要更改,我可以在一个地方更改 如果我有这样的语言下拉列表: echo $this->Form->input(__('Language'), array( 'options' => array('en' => 'English', 'fr' => 'Français') )); 如果

我有一个巨大的表格,我将分成几个部分。每个部分都有自己的模型。我有大量的下拉列表。它们有点类似,所以我想做的是能够通过调用php变量向它们添加选项。这将确保我没有打字错误,如果需要更改,我可以在一个地方更改

如果我有这样的语言下拉列表:

echo $this->Form->input(__('Language'), array(
    'options' => array('en' => 'English', 'fr' => 'Français')
));
如果我能做$this->Form->input('Language'),$languages),那就太好了;然后在$language中,我还可以添加带有变量的那些语言$语言=数组('options'=>$option1,$option2…);差不多吧

我只是想找到管理1000个下拉列表的最佳方法


我如何才能做到这一点?

在AppController中,设置beforeRender回调中的语言选项:-

public function beforeRender() {

    parent::beforeRender();

    $this->set('languages', array('en' => 'English', 'fr' => 'Français'));

}
然后在相关视图中,您可以使用:-

$this->Form->input(__('Language'), $languages);

创建一个语言模型并将您的语言存储在其中,然后使用模型上的find('list')加载它们可能是有意义的。如果您的其他模型需要链接到一种语言,则需要在相关模型上使用
$belongsTo=array('language')
关系,并保存模型的
语言id
。然后,您的所有语言数据都将存储在数据库中,以便您在一个地方进行更改。

请澄清-他们有自己的模型,这就是问题所在,或者您只是想做一个由数据库管理的多语言下拉列表?需要更清楚一点。我可以用10ish选项来选择建筑材料,但在另一部分只有7个选项。大概有100种建筑材料落下。不确定DB或just model是否是这里的最佳选择。我认为没有DB,在每个下拉列表中独立加载每个选项,而不是定义每个完整的下拉列表。在DB中,我猜它将存储id,该id将是.po文件中的一个键…您可以始终使用联接表来定义特定模型可用的选项。将这些保存在数据库中将使将来更易于维护。硬编码可能会在以后给您带来问题。我在想类似于CodeSet表和CodeSetItems表的东西。代码集由一个或多个代码集项组成。我想那会有用的。我需要一个交叉表来匹配它们。如果我有这样的东西,我如何处理模型:代码集(id,标签)代码集项(id,文本)下拉列表(id,代码集_id,代码集项_id)下拉列表是将代码集与代码集项相匹配的交叉表。关系是如何工作的?@Chris你的joins表(你称之为Dropdown)应该真正被称为codesets\u codesettems,以与CakePHP的命名约定保持一致(离开它会让你头痛不已)。然后在您的代码集模型中,您需要$hasandbelongtomany=array('Codesetitem');以及您的Codesetitem模型$HasandBelongTomany=array('Codeset');。联接表不需要模型。有关详细信息,请参阅CakePHP手册