0

我正在开发一个 CakePHP 项目,我有用户、帖子和位置模型等。User hasMany Location 和 Post belongsTo 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 输入之一中输入了错误的值,它会重定向到当前的添加视图,显示验证错误是什么,但是从控制器传递到视图的 $locations 数组会消失并且可以'不要在视图中使用它,我得到这个错误:

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

2 回答 2

0

这很可能是由您使用 设置$locations变量的位置引起的$this->set(),并且这只发生在 GET 请求的情况下。

提交表单时,您发送的是 POST/PUT 请求而不是 GET,并且内部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 回答