Validation Yii在多个模型验证和保存后重定向到同一视图
基于此,我有一个类似的解决方案。例如:Validation Yii在多个模型验证和保存后重定向到同一视图,validation,redirect,yii,Validation,Redirect,Yii,基于此,我有一个类似的解决方案。例如: public function actionBatchUpdate() { // retrieve items to be updated in a batch mode // assuming each item is of model class 'Item' $items=$this->getItemsToUpdate(); if(isset($_POST['Item'])) { $valid=t
public function actionBatchUpdate() {
// retrieve items to be updated in a batch mode
// assuming each item is of model class 'Item'
$items=$this->getItemsToUpdate();
if(isset($_POST['Item'])) {
$valid=true;
foreach($items as $i=>$item) {
if(isset($_POST['Item'][$i]))
$item->attributes=$_POST['Item'][$i];
$valid=$item->validate() && $valid;
}
if($valid) // all items are valid
// ...do something here
}
// displays the view to collect tabular input
$this->render('batchUpdate',array('items'=>$items));
}
问题是,我不知道过程结束时发生了什么。
如果我没有在此处放置任何重定向:
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
$this->redirect...
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
$this->redirect...
模型保存得很好,我得到的验证错误很好,但表单保持填充状态。这对我不好。
如果我把重定向放在这里:
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
$this->redirect...
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
$this->redirect...
模型保存得很好,但我的唯一规则是这些记录已经存在,因此会出现验证错误。好像有第二次模型保存还是什么
如果我把重定向放在这里:
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
$this->redirect...
}
if ($valid) {
foreach ($models as $model) {
$model->save();
}
}
$this->redirect...
模型的保存和重定向进行得很顺利,但我从未遇到验证错误
我曾尝试玩过令人不安的$u帖子,但我不知道遗漏了什么。我错过了什么
更新:也许这很重要,我想重定向到基本呈现的相同页面。 我不确定我是否需要重定向。 有趣的是,当我在网格中为checkboxcolumn执行此操作时,只返回了唯一的验证错误:
'checked' => '$_POST["rendelesGyartmanyId"][$row]',
我这样做是为了确保当用户检查了很多复选框,并且存在任何验证错误,并且页面被重新加载时,不必重新检查复选框,但这可能不是一个好的解决方案
更新_2:不确定,但问题可能是浏览器保留选定值。。。?我发现了一个类似的问题
问题是,在提交并重定向到同一视图之后,POST仍然被设置,并且值仍然存在。这就是Yii希望再次提交的原因,但由于我定义了唯一的规则,因此会出现验证错误。处理POST数据后,必须将其重定向到其他地方,这是Yii的常见行为吗?是否没有其他方法可以重定向到同一个页面作为一个干净的开始?我试图取消设置模型的属性,并发布,但我无法解决它,但可能我只是没有用好的方式来做
更新3:非常有趣。如果我在此处注释掉模型保存:
if ($valid) {
foreach ($models as $model) {
// $model->save();
}
$this->redirect...
}
重定向已被识别并正常工作,但一旦我删除注释,重定向将不被识别。我在那里放了一个假视图命令,这样我可以看到Yii没有识别它
有人能告诉我这里发生了什么吗?您对表单使用了ajax验证吗?如果是,则在控制器上实现ajax验证代码,或者将ajax验证设置为false。下面的代码是正确的:
if ($valid) {
foreach ($models as $model) {
$model->save(false); //The model has been validated, no need to validate again
}
$this->redirect...
}
非常感谢你的帮助。现在,如果我填充了所有内容,并且没有验证错误,那就好了。但是,如果第一次提交时出现验证错误,并且我想更正缺少的字段值,那么我会再次得到这个唯一的验证错误。也许重要的是,我想重定向到基本呈现的相同页面。这是关键:
$form=$this->beginWidget('GxActiveForm',array('id'=>'…-form','enableAjaxValidation'=>false,);
将表单小部件的enableAjaxValidation属性设置为false。现在它可以工作了。