【问题标题】:Lost Array After Validation Error验证错误后丢失数组
【发布时间】:2012-11-23 10:55:26
【问题描述】:

我正在开发一个 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]

【问题讨论】:

  • 为什么会有if ($this-&gt;request-&gt;is('get'))的条件?
  • 好吧,我删除了它,它工作了,谢谢:)
  • 我添加了一个答案以将其标记为已解决:)

标签: php cakephp


【解决方案1】:

这很可能是由于您将$locations 变量设置为$this-&gt;set() 造成的,并且这只发生在GET 请求的情况下。

提交表单时,您发送的是 POST/PUT 请求而不是 GET,并且永远不会执行 if 子句中的代码 - 因此您的视图文件中可以使用 $locations 变量。

如果您只想在显示干净的表单时加载这些值,您可以更改if 条件以检查$this-&gt;request-&gt;data 数组是否填充了用户提交的值。

【讨论】:

  • 不客气。请点击此帖子下方左侧的箭头,将其作为答案。
【解决方案2】:

为什么会有if ($this-&gt;request-&gt;is('get'))的条件?

如果您不用于任何特殊目的,则将其删除,变量locations 将始终设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多