gpt4 book ai didi

validation - CakePHP 表单验证失败时如何保留 URL 参数

转载 作者:行者123 更新时间:2023-12-01 11:08:51 25 4
gpt4 key购买 nike

我是 cakephp 的新手,并试图用它编写一个简单的应用程序,但是我遇到了一些表单验证问题。

我有一个名为“Person”的模型,它有许多“PersonSkill”对象。要向一个人添加“PersonSkill”,我已将其设置为调用这样的 url:

http://localhost/myapp/person_skills/add/person_id:3

我一直在传递 person_id,因为我想显示我们为其添加技能的人的姓名。

我的问题是如果验证失败,person_id 参数不会保存到下一个请求,因此不会显示此人的姓名。

Controller 上的添加方法如下所示:

function add() {        
if (!empty($this->data)) {
if ($this->PersonSkill->save($this->data)) {
$this->Session->setFlash('Your person has been saved.');
$this->redirect(array('action' => 'view', 'id' => $this->PersonSkill->id));
}
} else {
$this->Person->id = $this->params['named']['person_id'];
$this->set('person', $this->Person->read());
}
}

在我的 person_skill add.ctp 中,我设置了一个包含 person_id 的隐藏字段,例如:

echo $form->input('person_id', array('type'=>'hidden','value'=>$person['Person']['id']));

有没有办法在表单验证失败时保留 person_id url 参数,或者有没有更好的方法来做到这一点,我完全没有想到?

如有任何建议,我们将不胜感激。

最佳答案

FormHelper::create() 方法允许您在它创建的表单标签的 action 属性中配置 URL。

您想确保使用当前 URL,以便您发布到相同的 URL,如果验证失败,person_id 命名参数仍然存在。

尝试这样的事情:

echo $form->create('PersonSkill', array('url' => $this->params['named']));

CakePHP 应该合并命名参数,即 array('person_id' => 3) 与当前 Controller 和操作,并返回与您所在位置相同的 URL。

顺便说一下,如果 $this->data 不为空,你还想读取人员详细信息并在 View 中设置它们可用,所以我会丢失 Controller 中的 else 语句,只需要:

function add() {        
if (!empty($this->data)) {
if ($this->PersonSkill->save($this->data)) {
$this->Session->setFlash('Your person has been saved.');
$this->redirect(array(
'action' => 'view',
'id' => $this->PersonSkill->id
));
}
}
$this->Person->id = $this->params['named']['person_id'];
$this->set('person', $this->Person->read());
}

关于validation - CakePHP 表单验证失败时如何保留 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com