在CakePHP中创建并填充下拉菜单

时间:2014-05-01 00:58:43

标签: cakephp

我知道我可能是第500个问的人,但是我已经尝试了在这里和其他地方建议的所有内容以获得一个下拉菜单,它不会起作用,至少不会破坏其他所有内容。

所以,我有一个表路径和一个表格。

 ______________
|Routes        |  
|______________|  
|routeID       |  
|label         |  
|dayprice1     |        __________
|dayprice2     |       |Places    |
|nightprice1   |       |__________|
|nightprice2   |    ---|placeID   |
|distance      |  / |  |place     |
|start         |-/  |  |__________|
|end           |---/
|______________|

我目前正在研究的部分是路线和放置MVC。我希望实现的是fields.start和routes.end字段的下拉菜单。它们将placeID作为外键。我自己也设置了$ primaryKey。

我的问题是:

如果我在模型中使用$ hasMany作为变量,并在Controller中使用$this->set('places', $this->Route->Place->find('list')),在我的View中使用$this->Form->input('place_id'),我的其他函数如edit(),viewAll()等等将不再工作。我的表上有LEFT JOIN或类似的东西,但是使用place_id而不是placeID。更重要的是,只有在我点击Save按钮后,我的下拉字段才会首先填充。

我还尝试了输入字段中的变体,使用变量存储我的数组并在视图中调用它。$this->Form->input(start, array(option => $array))。它也无济于事。帮助

编辑:

好吧,这是我模特的代码。它只是一个标准的添加功能。控制器:

public function add() {
    if($this->request->is('post')) {
        $this->Route->create();
        if($this->Route->save($this->request->data)) {
            $this->Session->setFlash(__('Daten wurden hinzugefügt.'));
            return $this->redirect(array('action' => 'index'));
        }
       $this->Session->setFlash(__('Daten konnten nicht gespeichert werden!'));

    }

}

型号:

<!-- File: /app/View/Posts/add.ctp -->  

<h1>Route hinzufügen</h1>  
<?php  

echo $this->Form->create('Route', array('label'=> 'Route'));  
echo $this->Form->input('routeID', array('hidden', 'label'=> 'Routen- ID'));  
echo $this->Form->input('label', array('label'=> 'Name'));  
echo $this->Form->input('dayprice1', array('label'=> 'Tagpreis 1'));  
echo $this->Form->input('dayprice2', array('label'=> 'Tagpreis 2'));  
echo $this->Form->input('nightprice1', array('label'=> 'Nachtpreis 1'));  
echo $this->Form->input('nightprice2', array('label'=> 'Nachtpreis 2'));   
echo $this->Form->input('distance', array('label'=> 'Distanz'));  
echo $this->Form->input('start', array('label'=>'Start'));  
echo $this->Form->input('end', array('label'=> 'Ende'));  
echo $this->Form->end('Speichern');  
?>

1 个答案:

答案 0 :(得分:0)

感谢您的帮助,我做到了!我的$foobar = $this->set('places', $this->Route->Place->find('list'))位于我职能的第一个if{}内的错误位置!通过正确的模型关联,它工作得很好!

首先,我必须添加变量
    var $belongsTo = array('Place' => array( 'foreignKey' => 'placeID' ));
到模型路线,和 var $hasMany = 'Route'
到模型位置。 然后我不得不将行$foobar = $this->set('places', $this->Route->Place->find('list'))直接放在函数的开头 - 愚蠢的我,当然,只要我调用页面,变量就会被取消。这样做了!我现在可以使用echo $this->Form->input('start', array('label'=>'Start', 'options'=> $foobar));

调用我的列表