5

ユーザーがプロファイルデータを編集できる Cakephp 1.3 フォームがあります。ただし、フォーム内の一部の情報は読み取り専用にする必要があります (場合によっては)。

読み取り専用の場合にフィールドの内容をエコーし​​てフォーマットする唯一のオプションですか、それとも読み取り専用フィールドを許可する Cake フォームにフラグがありますか。理想的には、読み取り専用フィールドは、他のインターフェイスと同様にグレー表示されます。

    echo $this->Form->create('User', array('url' => array('controller' => 'User', 'action'=>'editUser')));

    echo $this->Form->input('id', array('type'=>'hidden'));

If (!isset($IsAdmin)) {
    // Only display username - read only! Add code here
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
} else {
    // Admins can edit user names
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
}           

 ... more fields here

    echo $this->Form->end(__d('users', 'Submit',true));
4

5 に答える 5

24

options 配列に 'disabled' キーを追加できますが、これはフォームのフロントエンド/プレゼンテーションにすぎないことに注意してください。ユーザーは入力フィールドの 'disabled' プロパティをオーバーライドして、その値を変更できます。

不要な変更が保存されないようにするには、モデルを使用してデータを保存するときに「fieldList」を指定する必要があります

無効なフォーム フィールドを出力するには;

echo $this->Form->input('fieldname', array('type'=>'hidden', 'disabled' => 'disabled'));

次に、データを保存するときに、フィールドリストを指定します (ドキュメント: http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html# Saving-your-data ) 。

$this->MyModel->save($this->data, true, array('field1', 'field2'));

フィールドリストには、ユーザーによる更新が許可されているすべてのフィールドを含める必要があります

于 2013-03-17T14:10:16.913 に答える
3

さて、いくつかのアプローチを試した後、ここに私が好きなものがあります.

1)読み取り専用を使用します(無効にすると、更新モードのときに「保存」を押した後に値が削除されますが、これはひどいです):

echo $this->Form->input('email', array('readonly' => 'readonly'));

2) ブラウザー プラグインを介して「読み取り専用」を削除するときにこれが更新されないようにするには、これをモデルの beforeSave に追加します。

if(isset($this->data[$this->alias]['id'])) // id is only set if we update
{
    unset($this->data[$this->alias]['email']);
}

フィールドリストは快適ではありません。実際には 1 つだけ除外したいのに、なぜすべてのフィールドを追加する必要があるのでしょうか?

設定を解除すると、データベース内で CakePHP が更新されなくなります。もちろん、(無効に) 更新された電子メール アドレスで保存を押すと、この更新はフォームに 1 回表示されます。しかし、ユーザーは HTML フォームを操作しており、データベース フィールドは変更されていないため、これは問題ではありません。

于 2013-12-22T10:41:34.920 に答える
1

次の 2 つのいずれかを行うことができます。

  1. フィールドを非表示にする

(元。echo $this->Form->input ('username, array ('type' => 'hidden'));

  1. フォームを送信する前、または場合によっては beforeSave で、username の値を元の値にリセットします。
于 2013-03-17T14:03:22.063 に答える