我正在开发一个CakePHP项目,我有其他用户,帖子和位置模型。 用户有多个位置和帖子属于用户,因此位置与帖子没有直接关系。
这是我在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模型中有验证规则的帖子输入中输入了错误的值,它会重定向到当前的添加视图,显示验证错误是什么,但是$ locations数组从控制器传递到视图消失,不能在视图中使用它,我收到此错误:
Notice (8): Undefined variable: locations [APP\View\Posts\add.ctp, line 68]
答案 0 :(得分:0)
这很可能是由于$locations
变量设置为$this->set()
的原因造成的,而这只发生在GET请求中。
提交表单时,您发送的是POST / PUT请求而不是GET,if
子句中的代码永远不会执行 - 因此{View}文件中提供了$locations
变量。
如果您只想在显示干净的表单时加载这些值,则可以更改if
条件以检查是否使用用户提交的值填充$this->request->data
数组。
答案 1 :(得分:0)
为什么你的条件是if ($this->request->is('get'))
?
如果您不使用任何特殊用途,请将其删除,并始终设置变量locations
。