2

これは私のadd.tcpです...

<?php

echo $this->Form->create('Group');
echo $this->Form->input('group_id', array('label' => 'ID'));
echo $this->Form->input('group_desc', array('label' => 'Group Description'));
echo $this->Form->end('Save');

?>

テーブル名:groupsテーブルフィールド:group_id、group_desc PK:group_id

これは私のコントローラーです...

class GroupsController extends AppController {
  public $helper = array('Html', 'Form', 'Session');
  public $components = array('Session');

  public function add() {
    if ($this->request->is('post')) {
      if ($this->Group->save($this->request->data)) {
        $this->session.setFlash('');
        $this->redirect(array('action' => 'index'));
      }
    }
  }  
}

このビューをブラウザに表示すると、フィールドgroup_idには何もありませんでしたが、group_descには、次のようなHTMLソースがありました...

<form action="/cakephp/index.php/groups/add" id="GroupAddForm" method="post" accept-charset="utf-8" name="GroupAddForm">
    <div style="display:none;">
        <input type="hidden" name="_method" value="POST">
    </div><input type="hidden" name="data[Group][group_id]" id="GroupGroupId">
    <div class="input text">
        <label for="GroupGroupDesc">Group Description</label><input name="data[Group][group_desc]" maxlength="15" type="text" id="GroupGroupDesc">
    </div>
    <div class="submit">
        <input type="submit" value="บันทึก">
    </div>
</form>

なぜ隠されたのですか?

4

3 に答える 3

4

CakePHPは、ユーザーがIDを手動で入力することを望まないことを自動的に判断します。これにより、IDが非表示になります。

IDフィールドを強制的に表示する場合は、次のように設定typetextます。

echo $this->Form->input('group_id', array('type' => 'text', 'label' => 'ID'));
于 2012-07-27T09:09:19.233 に答える
4

主キー入力はデフォルトで非表示になっているためです。CakePHPは、自動インクリメントINTまたはuuidCHARとして追加時に主キーを作成します。主キーを手動で作成することはお勧めしません。

非表示のタイプをテキストに変更できます。

echo $this->Form->input('group_id', array('label' => 'ID', 'type' => 'text'));
于 2012-07-27T09:10:52.930 に答える
1

あなたのデータベース構造に従って、私は何かを提案したいと思います:

グループテーブルの主キーとしてgroup_idがあり、データベースからauto_incrementになります。そのIDを追加フォームに手動で入力する必要はなく、自動的に保存されます。フォームフィールドは、モデル構造に従って生成されます。

于 2012-07-27T09:37:25.747 に答える