Я изменяю свой веб-сайт отдела, который позволяет пользователю вводить автора и рейтинг.yii фреймворк ошибки проверки не может показать
Но я не могу показать сообщение об ошибке проверки при вводе не целого числа в тексте ранга.
array('dataset_id, author_id, rank', 'numerical', 'integerOnly'=>true),
<?php echo $form->error($model,'rank'); ?>
также в файле контроллера, когда я добавить
if ($author['rank'] == $rank && $author['name'] == $name) {
$model->addError("warning", "Duplicate input");
в файле вида также не может показать любую вещь, просто обновите страницу пустой текст поля
<?php echo $form->errorSummary($model); ?>
Это DatasetAuthor модель нормы
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('dataset_id ,rank,author_name', 'required'),
array('dataset_id, author_id, rank', 'numerical', 'integerOnly'=>true),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, dataset_id, author_id, doi_search, author_name_search , orcid_search , rank_search', 'safe', 'on'=>'search'),
);
}
функция контроллера
public function actionCreate1() {
$model = new DatasetAuthor;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
//this is fake information
$model->dataset_id = 1;
//update
if (!isset($_SESSION['authors']))
$_SESSION['authors'] = array();
$authors = $_SESSION['authors'];
if (isset($_POST['DatasetAuthor'])) {
$ranks = trim($_POST['DatasetAuthor']['rank']);
$names = trim($_POST['DatasetAuthor']['author_name']);
if (substr($names, -1) == ";")
$names = substr($names, 0, -1);
$valid = true;
$namearray = array();
if ($names != "")
$namearray = explode(";", $names);
// var_dump($namearray);
if ($ranks == "")
$rankarray = array();
else
$rankarray = explode(";", $ranks);
// var_dump($rankarray);
// if (count($namearray) != count($rankarray)) {
// $model->addError("error", "the number of name and rank are different!");
// $valid = false;
// }
//test names
if ($valid) {
foreach ($namearray as $name) {
if ($name == "") {
$model->addError("author_name", "name can't be blank!");
$valid = false;
break;
}
}
}
//test ranks
if ($valid) {
foreach ($rankarray as $rank) {
// if ($rank == "") {
// $model->addError("error", "rank can't be blank!");
// $valid = false;
// break;
// }
if (!is_numeric($rank)) {
$model->addError("rank", "rank should be an integer!");
$valid = false;
break;
}
}
}
// var_dump(count($rankarray)." test");
if ($valid) {
foreach ($namearray as $index => $name) {
if ($index < count($rankarray)) {
$rank = $rankarray[$index];
} else {
$rank = 1;
while (true) {
$found = true;
//find the maximum one in the authors array
foreach ($authors as $author) {
if ($author['rank'] == $rank){
$found = false;
break;
}
}
if($found)
break;
$rank++;
}
}
$valid = true;
//check if there is duplicate input
foreach ($authors as $key => $author) {
if ($author['rank'] == $rank && $author['name'] == $name) {
$model->addError("rank", "Duplicate input");
$valid = false;
break;
}
}
if ($valid) {
//store author dataset
$model->rank = $rank;
$model->author_name = $name;
$id = 0;
if ($this->storeAuthor($model, $id)) {
$newItem = array('rank' => $rank, 'id' => $id, 'name' => $name);
array_push($authors, $newItem);
$_SESSION['authors'] = $authors;
$vars = array('authors');
Dataset::storeSession($vars);
} else {
$model->addError("error", "database operation failure, please log out first and log in again.");
}
}
}
}
}
// $model = new DatasetAuthor;
$author_model = new CArrayDataProvider($authors);
$model = new DatasetAuthor;
$this->render('create1', array(
'model' => $model,
'author_model' => $author_model,
));
}
просмотров
<?php echo $form->errorSummary($model); ?>
<?= $form->textField($model, 'author_id') ?>
<?php echo $form->error($model, 'author_id'); ?>
<?= $form->textField($model, 'rank',array('size' => 60, 'maxlength' => 200)) ?>
<?php echo $form->error($model, 'rank'); ?>
спасибо, но первая часть массива ('DataSet_ID, author_id, звание', 'числовая', 'integerOnly' => верно), PHP Эхо $ форма-> ошибка ($ модель, 'AUTHOR_ID') ; ?> почему он не может показать – AntiGMO
Где находится 'array (..)' code? Также для отображения ошибки ранга вы используете ошибку 'echo $ form-> ($ model, 'rank')' – topher
извините, это должна быть ошибка Php echo $ form-> ($ model, 'rank'); ?>. Я запутался. Я установил правила в модели только для целочисленного ранга, но он не может отображать сообщения об ошибках, просто обновить страницу и установить текстовое поле пустым. – AntiGMO