正如我假设的那样,try / catch应该执行catch-block中定义的代码,如果try-block中有任何错误,对吗? 以下代码不会这样做。在这种情况下,它将被抛出错误:
Getting unknown property: common\modules\lookup\models\LAnrede::anreden
任何想法,如何分别解决我做错了什么?
<?php
use yii\helpers\Html;
use frontend\modules\bewerber\models\Bewerber;
use common\modules\basis\models\Person;
use common\modules\lookup\models\LAnrede;
use yii\base\ErrorException;
use kartik\widgets\Alert;
try {
$query_one = LAnrede::find()->innerJoin('Person', 'l_anrede.id = Person.id_anrede')->one();
$query_all = LAnrede::find()->innerJoin('Person', 'l_anrede.id = Person.id_anrede')->all();
var_dump($query_one);
var_dump($query_all);
echo"<h3>Anrede_one:" . $query_one->anrede . "</h3>";
$x = 1;
foreach ($query_all as $attributes) {
echo "<br><label>Anrede_all_$x:<br>" . $attributes->anreden . "</label>";
$x++;
}
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
?>
&#13;
ponury-kostek的暗示:
我在LAnrede课程中为每个方法try / catch-Block编程。没有效果! 这是模特/班级的LAnrede
<?php
namespace common\modules\lookup\models\base;
use Yii;
use yii\behaviors\TimestampBehavior;
use yii\behaviors\BlameableBehavior;
use mootensai\behaviors\UUIDBehavior;
use yii\base\ErrorException;
use kartik\widgets\Alert;
/**
* This is the base model class for table "l_anrede".
*
* @property integer $id
* @property string $anrede
*
* @property \common\modules\lookup\models\Person[] $people
*/
class LAnrede extends \yii\db\ActiveRecord {
use \mootensai\relation\RelationTrait;
/**
* This function helps \mootensai\relation\RelationTrait runs faster
* @return array relation names of this model
*/
public function relationNames() {
try {
return [
'people'
];
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
* @inheritdoc
*/
public function rules() {
try {
return [
[['anrede'], 'string', 'max' => 255],
[['optimistic_lock'], 'default', 'value' => '0'],
[['optimistic_lock'], 'mootensai\components\OptimisticLockValidator']
];
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
* @inheritdoc
*/
public static function tableName() {
try {
return 'l_anrede';
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
*
* @return string
* overwrite function optimisticLock
* return string name of field are used to stored optimistic lock
*
*/
public function optimisticLock() {
try {
return 'optimistic_lock';
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
* @inheritdoc
*/
public function attributeLabels() {
try {
return [
'id' => Yii::t('app', 'ID'),
'anrede' => Yii::t('app', 'Anrede'),
];
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
* @return \yii\db\ActiveQuery
*/
public function getPeople() {
try {
return $this->hasMany(\common\modules\basis\models\Person::className(), ['id_anrede' => 'id']);
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
public function behaviors() {
try {
return [
'timestamp' => [
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'angelegt_am',
'updatedAtAttribute' => 'aktualisiert_am',
'value' => new \yii\db\Expression('NOW()'),
],
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'angelegt_von',
'updatedByAttribute' => 'aktualisiert_von',
],
'uuid' => [
'class' => UUIDBehavior::className(),
'column' => 'id',
],
];
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
/**
* @inheritdoc
* @return \common\modules\lookup\models\LAnredeQuery the active query used by this AR class.
*/
public static function find() {
try {
return new \common\modules\lookup\models\LAnredeQuery(get_called_class());
} catch (ErrorException $error) { //fange den schweren MySQL-Fehler ab
echo Alert::widget([//informiere den Anwender,daß kein Datensatz gefunden wurde
'type' => Alert::TYPE_DANGER,
'title' => 'Konfigurationsfehler',
'icon' => 'glyphicon glyphicon-remove-sign',
'body' => 'Dem angemeldeten User ist in der Mitarbeitertabelle kein Mitarbeiter zugeordnet<br><br>' . $error,
'showSeparator' => true,
'delay' => false
]);
}
}
}
&#13;
答案 0 :(得分:1)
因为导致错误use common\modules\lookup\models\LAnrede;
的行在try / catch块之外。
更准确地说,common\modules\lookup\models\LAnrede
导入的文件中存在错误,这就是为什么try / catch块无法解决的问题
抓住错误。修复了LAnrede
。
答案 1 :(得分:1)
在try
区块中使用$attributes->anreden
。可能在您的数据库中没有具有此名称的列(或者您仍然具有数据库缓存)。指出这个问题,为什么try/catch
没有起作用 - 因为你试图捕捉到错误的异常。您试图抓住yii\base\ErrorException
,但它是'yii\base\UnknownPropertyException
例外。要正确处理它,你应该抓住一体化的一切。或者展开catch
块:
一体化:
} catch(\Exception $error) {
<强>扩展强>
} catch (ErrorException $error) {
// do some stuff here
} catch (\yii\base\UnknownPropertyException $error) {
// do some another stuff here
} catch (\Exception $error) {
// do some stuff with any other exceptions
}