0

私はCakePHPプロジェクトに取り組んでおり、特にユーザー、投稿、場所のモデルがあります。ユーザーhasManyLocationとPostはUserに属しているため、LocationはPostに直接関連していません。

これは、Postコントローラーの私のコードです。

public function add() {
    if ($this->request->is('get')) {
       $this->loadModel('Location');
       $this->set('locations', $this->Location->find('all', array('conditions' => array('user_id' => $this->Auth->user('id')))));
    }
    ...
}

そして、これは投稿/追加ビューの私のコードです:

<?php
$i = 0; $j = 0;
foreach ($locations as $location):
    $location_names[$i] = $location['Location']['name'];
    $i++;
endforeach;
echo "<select name=\"location\" onchange=\"select(this.value)\">";
echo "<option value=\"\">Select a saved location</option>";
foreach ($locations as $location):
    echo "<option value=\"" . $location['Location']['latitude'] . "," . $location['Location']['longitude'] . "\">" . $location_names[$j] . "</option>";
    $j++;
endforeach;
?>
</select>

Postモデルに検証ルールがあるpost入力の1つに間違った値を入力すると、現在の追加ビューにリダイレクトされ、検証エラーが表示されますが、コントローラーからビューに渡された$locations配列が表示されなくなります。ビューで使用しないでください。次のエラーが発生します。

Notice (8): Undefined variable: locations [APP\View\Posts\add.ctp, line 68]
4

2 に答える 2

0

$locationsほとんどの場合、これは変数をで設定した場所が原因で$this->set()あり、これはGETリクエストの場合にのみ発生します。

フォームを送信するときは、GETの代わりにPOST / PUTリクエストを送信しているため、コード内のif句は実行されません。したがって、$locations変数はビューファイルで使用できます。

クリーンなフォームを表示するときにのみこれらの値をロードする場合は、if条件を変更して、$this->request->data配列にユーザーが送信した値が入力されているかどうかを確認できます。

于 2012-11-23T10:58:30.420 に答える
0

なぜあなたはの状態にありif ($this->request->is('get'))ますか?

特別な目的で使用しない場合は、それを削除すると、変数locationsが常に設定されます。

于 2012-11-23T11:37:17.670 に答える