0

2 つのリレーショナル テーブルをリンクするために、次のモデルを作成します。

    class Ficha extends AppModel {

    //public $useTable = 'ficha_seg';

    var $primaryKey = 'id_ficha';

    var $name = 'Ficha';
    var $belongsTo = array(
        'Perigo' => array(
            'className'    => 'Perigo',
            'foreignKey'   => false,
            'conditions' => 'Perigo.id_fichas = Ficha.id_ficha'
        )
    );
}

ここで、クラス Ficha からのデータを必要とするフォームがあり、テーブル「Perigos」のデータを入力する別の ctp ページにリダイレクトされます。ただし、私はまだ CakePHP の初心者なので、テーブル "Perigos" にデータを挿入するための 2 番目のフォームを作成するのは困難です。これが、2番目のフォームに関連して現時点で作成したコードです。

FichasController.php (テーブル「Perigos」にデータを保存するメソッド:

public function preencher_ficha(){

if ($this->request->is('ficha')) {
        $this->Ficha->create();

    if ($this->Ficha->Perigo->save($this->request->data)) {
        $last_id=$this->Ficha->getLastInsertID();
        $this->Session->setFlash('Your post has been updated '.$last_id.'.');
        //$this->redirect(array('action' => 'preencher_ficha'));
    } else {
        $this->Session->setFlash('Unable to qualquer coisa your post.');
    }
}   
}

次の形式の preencher_ficha.ctp ファイル:

echo $this->Form->create('Ficha->Perigo', array('action' => 'index'));
echo $this->Form->input('class_subst', array('label' => 'Classificação:'));
echo $this->Form->input('simbolos_perigo', array('label' => 'Símbolos:'));
echo $this->Form->input('frases_r', array('label' => 'Frases:'));
echo $this->Form->end('Finalizar Ficha'); 

ここでは、作成部分が間違っていると思いますが、コントローラー部分にもエラーがあると思います。

4

1 に答える 1

1

他の方法でビューを構成することをお勧めします。Perigosテーブルにデータを保存する場合は、 のsave方法をPerigosController使用しsave.ctp、Perigos ビューでファイルを使用して、使用するフォームを表示します。

とにかく、自分のやり方でやりたい場合は、フォームがpreencher_fichaデータを送信する関数を指す必要があります。

echo $this->Form->create('Ficha->Perigo', array('action' => 'preencher_ficha'));

また、これを変更する必要があります:

if ($this->request->is('ficha')) {

これに

if ($this->request->is('post')) {

これは、データが POST メソッドからのものか GET メソッドからのものかを確認する方法にすぎません。

そして、アドバイス: コントローラーやモデルにスペイン語の名前を使用しないでください。英語のものを使用すると、CakePHP の命名規則に従うのがより簡単になり、より意味があり、時間を節約できます。

于 2012-12-04T11:52:20.610 に答える