1

私はケーキに不慣れで、バージョン2を使用しています。

私はモデルを持っています

hgcylinder.php

class HgCylinder extends AppModel  {
    //put your code here
    var $name= "HgCylinder";

    var $belongsTo = array('HgKeyGase');
}

hgkeygase.php
class HgKeyGase extends AppModel  {
    //put your code here
    var $name= "HgKeyGase";


    public $belongsTo = array(
        'HgKeyColor' => array(
            'className' => 'HgKeyColor',
            'foreignKey' => 'hg_key_color_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
        );

}

Controller HgCylindersController.php

<?php

class HgCylindersController extends AppController
{
    var $name = "HgCylinders";
    // var $scaffold;
    function index()
    {
        $this->set('hey',$this->HgCylinder->find('all'));
    }


    public function edit($id = null) {
        $this->HgCylinder->id = $id;
        if ($this->request->is('post')) {
        var_dump($this->request->data);
        exit;
            if ($this->HgCylinder->save($this->request->data)) {
                $this->Session->setFlash(__('Cylinder has been updated successfull'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The cylinder could not be saved. Please, try again.'));
            }
        } else {
            $this->request->data = $this->HgCylinder->read(null, $id);
        }
        $hg_key_gase_id = $this->HgCylinder->HgKeyGase->find('list');

        $this->set(compact('hg_key_gase_id'));
    }

} 

?>

View : edit.ctp
<?php 

echo $this->form->create('HgCylinder',array('action'=>'edit'));
echo $this->form->input('hg_key_gase_id',);
echo $this->form->input("capacityM3");
echo $this->form->input("weightEmpty");
echo $this->form->input("weightFilled");
echo $this->form->input("isFilled");
echo $this->form->end('Add');
?>

私の問題は、hg_key_gase_idがオプションのない選択リストになることです。ビューとコントローラーで名前を「hgKeyGas」に変更すると、hg_key_gasesテーブルのオプションが表示されます。ただし、保存時にhg_key_gase_idフィールドの値はhg_cylindersテーブルに保存されず、代わりにこのフィールドにnullが格納されます。

次に、テーブルのフィールドとまったく同じように、コントローラーからビューに渡す変数名が必要であることを知りたいです。

4

1 に答える 1

0

慣習に固執するようにしてください。

っていうことは

$hgKeyGases = $this->HgCylinder->HgKeyGase->find('list');

$this->set(compact('hgKeyGases'));

複数形は、選択ボックスに入力できるようになります(クックブックに記載されています)。

$ this-> Form-> input()も使用します(大文字のFに注意してください)。$nameは必要ありません。read()を使用せず、代わりにfind(first)を使用してください。アクションを設定しないでください(フォームはデフォルトでそれ自体に投稿されます)。

最も重要な。ファイルシステム内のファイルの大文字と小文字は常に尊重してください。特に、NIXシステム(大文字と小文字が区別されます)への展開を計画している場合。したがって、モデルクラスファイルとしてはHgCylinder.phpとHgKeyGase.phpになります。

最後のヒント:ベーキング(シェルコンソールを介したケーキベイク)を使用して、クラッドファイルをベイクします。このようにして、それがどのように正しい方法で行われたかを学びます。ちなみにそれはあなたの質問自体にも答えていただろう。

ドキュメントはここにあります:http://book.cakephp.org/2.0/en/index.html おそらくあなたは古い古いバージョンを見つけました、2.xのものはあなたが使うべきだったものです。

于 2012-11-08T14:01:33.217 に答える