Всем привет!
Сегодня открыл для себя Yii (статьей от автора Kuzya).
версия framework: yii-1.1.0.r1700
остановился на ошибке в момент повторной регистрации пользователя с одинаковым User:
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]:
Integrity constraint violation: 1062 Duplicate entry '123' for key 2INSERT INTO `Users`
(`login`, `password`, `email`) VALUES (:yp0, :yp1, :yp2)
в модуле users.php правила:
public function rules()
{
return array(
// логин и почта должны быть введены
array('login','required','on'=>'register',
'message'=>Yii::t('common','login_empty')),
array('email','required','on'=>'register',
'message'=>Yii::t('common','email_empty')),
// Они должны быть уникальными
array('login','unique','on'=>'register',
'message'=>Yii::t('common','login_in_base')),
array('email','unique','on'=>'register',
'message'=>Yii::t('common','email_in_base!')),
// Почтовый адрес должен иметь соответствующий формат
array('email','email','on'=>'register',
'message'=>Yii::t('common','email_no_right_format'))
);
и функция в контроллере sitecontroller.php:
public function actionRegister()
{
$errors = Array();
if (isset($_POST['Users']))
{
$users = new Users;
// Заполняем поля
$users->login = $_POST['Users']['login'];
$users->password = md5($_POST['Users']['password']);
$users->email = $_POST['Users']['email'];
// Проверяем данные
$users->validate('register');
// Если ошибки есть
if( $users->hasErrors() )
{
// Помещаем их текст в массив $errors
foreach($users->getErrors() as $field) $errors[] = $field[0];
}
// Если массив ошибок пуст
if(!count($errors))
{
// Сохраняем данные
$users->save();
// Устанавливаем сообщение
Yii::app()->user->setFlash("registered",Yii::t("common","registered"));
// Обновляем страницу
$this->refresh();
// Если ошибки есть то показываем форму регистрации и передаём их в шаблон
}
}
// показываем форму с передаваемым массивом ошибок
$this->render('register',Array('errors' => $errors));
}
и в шаблоне register.php с формой регистрации выводятся ошибки если они есть:
<?if(count($errors)):?>
Ошибки: <br />
<?foreach($errors as $error):?>
<b><?=$error;?></b><br />
<?endforeach;?>
<?endif;?>
<br />
но вот ошибки не выводятся в моем шаблоне, а выводится CDbException.
manual читается…