Нормальный вывод ошибок

Как переопределить вывод ошибок? Или ещё лучше создать правило на изменение окончания.

Не приятно читать имя не должен быть пустым., тема не должен быть пустым.

дак это самое,


array('name, topic', 'required', 'message' => 'Это обязательное поле')

?

ну или для каждого отдельно


array('name', 'required', 'message' => 'Заполните имя'),

array('topic', 'required', 'message' => 'Заполните тему')

Да, звучит неприятно, но с этими особенностями русского языка ничего не поделаешь. Придется писать тексты ошибок вручную. См. параметр message для валидатора (и другие, напр. tooLongдля CStringValidator). И если говорить откровенно, то выражение “не должен быть пустым” немного режет слух обычному пользователю, которому понятнее будет прочитать “необходимо заполнить поле …” :)

andy_s

Уже сделал:) В языковом файле сделал что бы оформлялось так:


{attribute} не долж[на|но|ен] быть пустым.

А потом анализ окончания и уже подбор нужной части)

Вот так:


'{attribute} не долж[на|но|ен] быть пуст[ой|ым|ым].'

Кому надо:

В классе CValidator, метод addError заменить на:




	protected function addError($object,$attribute,$message,$params=array())

	{

		$type = 0;

		$sValue = $object->getAttributeLabel($attribute);

		if ( preg_match_all( '#\[(.+?)\]#si', $message, $aMatchh, PREG_SET_ORDER ) )

		{

			foreach( $aMatchh as $aMatch )

			{

				$aMatch[1] = explode( '|', $aMatch[1] );

				if ( 3 == sizeof( $aMatch[1] ) )

				{

					if ( !$type )

					{

						$sEnd = mb_substr( $sValue, -2, 2, 'utf-8');

						if ( $sEnd{0}.$sEnd{1}.$sEnd{2}.$sEnd{3} == 'РёСЏ' or $sEnd{2}.$sEnd{3}=='Р°' or $sEnd{2}.$sEnd{3}=='СЊ' )

							$type = 1;

						elseif ( $sEnd{2}.$sEnd{3} == 'СЏ' or $sEnd{2}.$sEnd{3} == 'Рµ' )

							$type = 2;

						else

							$type = 3;

					}

						

					if ( 1 == $type )

						$sEnd = $aMatch[1][0];

					if ( 2 == $type )

						$sEnd = $aMatch[1][1];

					if ( 3 == $type )

						$sEnd = $aMatch[1][2];

						

					$params[$aMatch[0]] = $sEnd;

				}

			}

		}

		$params['{attribute}'] = $sValue;

		

		$object->addError($attribute,strtr($message,$params));

	}

Способ не идеальный, но работает

andy_s

Хороший вариант. К релизу поменяю на него сообщения.

А когда примерно релиз?

ncs

Пока неизвестно.

samdark

Было бы хорошо если бы в Gii всунули обработку типа enum, а то приходится каждый раз самому добавлять CRangeValidator

Lion__

Надо добавить это в тикет: http://code.google.com/p/yii/issues/entry

При этом привести SQL таблицы с enum и код, который должен получиться.

Если туда напишу - у команды разработчиков месяца два уйдёт на перевод) Я инглиш плохо шарю)

Если не выходит на английском, пишите не русском. Я пойму и переведу ;)

Готово

http://code.google.com/p/yii/issues/detail?id=1988