0

それで、誰かが私にこれを説明できますか?編集アクションを作成しようとしていますが、以下が機能しない理由が少しわかりません:

public function edit($id = null) {

    if (!$id) {
        throw new NotFoundException('NO ID HAS BEEN SUPPLIED');
    } 

    $data = $this->User->findById($id); 

    if(!$this->request->is('post')) { $this->request->data = $data;   }


    if($this->request->is('post') || $this->request->is('put')) { 
       $this->User->id = $id; 
       $this->User->save($this->request->data);
       $this->redirect(array('action'=>'index'));
   } 
}

つまり、機能しないということは、findById($id) から収集されたデータをフォームに事前入力している間、フォームが送信された後に新しい入力でデータベースを更新しないということです。

私はこれを置き換えました:

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

以下を使用します。

if($this->request->is('get'))

そして突然、それはうまくいきます。投稿から収集された新しい値で行を更新します。しかし、ここで何が起こっているのかわかりません。$this->request->is('get') は機能するのに、!$this->request->is('post) は機能しないのはなぜですか? 確かに、アクションが最初に呼び出されるときは、GET 要求を使用して呼び出されますか? そのリクエストは !$this->request->is('post') に該当しませんか?

編集:

以下は ctp です: app/View/Users/edit.ctp

 <?php echo $this->Form->create('User'); ?>

     <fieldset>
    <legend><?php echo __('edit User'); ?></legend>

    <?php 
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->input('role');
   // echo $this->Form->input('role', array(
     //   'options' => array('admin' => 'Admin', 'regular' => 'Regular')
    //));//
?>
</fieldset> <?php echo $this->Form->end(__('Submit')); ?>
4

2 に答える 2

1

こうすれば

public function edit() {
$id = $this->params['id'];
if (!$id) {
    throw new NotFoundException('NO ID HAS BEEN SUPPLIED'); } 

   $data = $this->User->findById($id); 

   if(!$this->request->is('post')) { $this->request->data = $data;   }


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

$this->User->id = $id; 
$this->User->save($this->request->data);
$this->redirect(array('action'=>'index'));} 

URLから編集するIDを渡すのは安全な方法ではありません...$this->params['id']投稿IDがあるため、それで機能し$this->request->is('put')ます。

于 2013-08-29T23:55:12.000 に答える