Основано на this article, у меня есть аналогичное решение. Это пример: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=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...
модели сохранить и перенаправить идет хорошо, но я никогда не получаю ошибки проверки.
Я попытался сыграть с отключением $ _POST, но я не знаю, чего не хватает. что мне не хватает?
UPDATE: возможно, это важно, что я хотел бы перенаправить на ту же страницу, что в основном сделан. Я не уверен, что мне все равно нужно перенаправить. Интересно то, что я получаю только свою уникальную ошибку проверки назад, когда я делаю это в сетке для checkboxcolumn:
'checked' => '$_POST["rendelesGyartmanyId"][$row]',
Я делаю это, чтобы убедиться, что, когда пользователь проверяет много флажков, и там любые ошибки проверки, и страница перезагружается, нет необходимости перепроверять флажки, но, возможно, это не очень хорошее решение.
UPDATE_2: не уверен, но, возможно, проблема заключается в том, что браузер сохраняет выбранные значения ...? Я нашел this thread о похожей проблеме.
проблема заключается в том, что после отправки и перенаправления на тот же режим POST по-прежнему установлен, а значения все еще находятся там. поэтому Yii хочет подать снова, но поскольку у меня есть уникальное правило, я получаю ошибку проверки. Является ли это распространенным поведением Yii, что после работы с данными POST его нужно перенаправить в другое место? Нет ли другого способа как-то перенаправить на ту же страницу, что и чистый старт? Я попытался отключить атрибуты моделей и POST, но я не мог ее решить, но, возможно, я просто не делал этого по-хорошему.
ОБНОВЛЕНИЕ 3: очень интересно. если я закомментировать модель сохранить здесь:
if ($valid) {
foreach ($models as $model) {
// $model->save();
}
$this->redirect...
}
редирект признается и работает, но как только я удалить закомментировать, перенаправлять не распознается. Я поставил там ложную команду зрения, и таким образом я мог видеть, что Yii ее не узнает.
Может кто-нибудь, пожалуйста, разъяснит мне, что здесь происходит?
спасибо большое!
Большое спасибо за помощь. Теперь, если я заполню все, и ошибок проверки не существует, это хорошо. Но, если есть ошибка проверки для первого представления, и я хочу исправить недостающее значение поля, я снова получаю эту уникальную ошибку проверки. – user2511599
Возможно, это важно, что я хотел бы перенаправить на ту же страницу, что в основном сделан. – user2511599
Это был ключ: '$ form = $ this-> beginWidget ('GxActiveForm', array ( 'id' => '...- form', 'enableAjaxValidation' => false, ));' установка форма виджет ** включеноAjaxValidation ** свойство to ** false **. теперь он работает. – user2511599