А чем 3 конфиг плох, что его исключение игнорируется?
try {
}
catch (Exception $e) {
try {
}
catch (Exception $e) {
try {
}
catch (Exception $e) {
echo $e->getMessage(), "\n";
}
}
}
Хорошо, когда функция request($config) имеет тип данных bool!
Тогда запись можно было бы сделать такой:
try {
Yii::app()->session['profile_type']='light';
$result = $this->request($config);
if (!$result) {
yii::app()->session['profile_type'] = 'extended';
$result = $this->request($config2);
if (!$result) {
Yii::app()->session['profile_type']='full';
$result = $this->request($config3);
}
else
throw new Exception("Config exception: load is stoped");
}
}
catch (Exception $e) {
Yii::app()->session['profile_type'] = NULL;
echo e->getMessage();
}
Потому, что try...catch имеет ввиду при появлении первого исключения переходить в блок catch. Из этого следует что при выбросе исключения первой попыткой загрузить конфиг вторая и последующие не выполняются. Это исходит из того смысла, что исключение не является результатом выполнения функции или отказом по какой-то причине загрузить конфиг при условии что физически конфиг существует, а результатом функции есть true - при успехе и false при неудачи.
... Попробовать получить результат true или false, а в случае исключения отобразить его содержание.