yii слишком строг к ошибкам

Варианты Вы описали, но к сожалению они работают если у Вас свой сервер или дорогой хостинг с возможностью влиять на правила php.ini через htaccess.

Нет, я не прошу готового решения, просто я думал, что здесь знают как влиять на Yii в подобной ситуации.

Остается сделать такой вывод: придется самому разбираться в исходниках Yii и учить его новому.

Не переживайте, ответ вреда не принесет, наоборот очень жду его:

Еще раз прошу, подскажите пример с переопределением CApplication::handleError, чтобы я смог игнорировать notice. Если не хотите писать сюда, то пожалуйста напишите личным сообщением, заранее спасибо.

Итак, покопавшись в Yii я обнаружил, что объявленные в index.php константы:


define('YII_ENABLE_ERROR_HANDLER',false);

define('YII_ENABLE_EXCEPTION_HANDLER',false);

действительно отменяют слежку за Notice, а возникший у меня:


Fatal error: Uncaught exception 'CException' with message 'Property "URL.pages" is not defined.

не относится к Notice в том смысле, какой придал бы ей стандартный подход PHP.

Yii выдает Fatal error потому, что у него в CComponent есть метод-проверки __get, который проверяет наличие изначально объявленных свойств в Вашем классе (это по мнению Yii обязательно).

Таким образом, у меня новый вопрос - как сказать Yii, чтобы он этого не делал? Другими словами, как сказать Yii - не проверяй наличие изначальное объявление свойств в классе?

Пожалуйста, если не знаете ответа, не давайте совет "Привыкайте писать нормальный код", заранее спасибо за понимание.

Не наследоваться от CComponent или переопределить __get и остальных.

Спасибо за совет, а можно рабочий пример? (сюда или в личку).


class X {

}


$x = new X();

$x->a = 10;

echo $x->a;

:) Вы привели пример переопределения свойства своего класса, я просил другое. Извините, наверное недостаточно понятно высказался. Поэтому еще раз - подскажите, как правильно переопределить метод __get класса CComponent. Хочется избавить его от:


throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.', array('{class}'=>get_class($this), '{property}'=>$name)));

Примерно вот так:




/**

 * Sets value of a component property.

 * Do not call this method. This is a PHP magic method that we override

 * to allow using the following syntax to set a property or attach an event handler

 * <pre>

 * $this->propertyName=$value;

 * $this->eventName=$callback;

 * </pre>

 * @param string $name the property name or the event name

 * @param mixed $value the property value or callback	 

 * @see __get

 */

public function __set($name,$value)

{

	$setter='set'.$name;

	if(method_exists($this,$setter))

		return $this->$setter($value);

	else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))

	{

		// duplicating getEventHandlers() here for performance

		$name=strtolower($name);

		if(!isset($this->_e[$name]))

			$this->_e[$name]=new CList;

		return $this->_e[$name]->add($value);

	}

	else if(is_array($this->_m))

	{

		foreach($this->_m as $object)

		{

			if($object->getEnabled() && (property_exists($object,$name) || $object->canSetProperty($name)))

				return $object->$name=$value;

		}

	}

}



@smadark - даже капитан очевидность не смог бы дать более конкретный ответ )))

@Lebnik - вы не задумывались о написании своего фреймворка? Без всех недостатков присущих существущим решениям - позволять игнорировать любые ошибки, в том числе фатальные, может даже отсылать разработчику поздравление по почте при обнаружении ошибки…

@seb - такой фрэймвор у меня есть, но у него нет таких возможностей, которые есть в Yii, поэтому я попытался и решил вопрос, может не самым правильным, но на данный момент самым логичным для меня способом http://www.yiiframework.com/forum/index.php/topic/32352-yii-и-свои-error-reporting/

Спасибо всем, кто участвовал в дискусии, очень приятно, что не игнорируете и помогаете новичкам.