try / catch-block没有任何影响

时间:2017-09-21 14:39:15

标签: yii2-advanced-app

正如我假设的那样,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;
&#13;
&#13;

ponury-kostek的暗示:

我在LAnrede课程中为每个方法try / catch-Block编程。没有效果! 这是模特/班级的LAnrede

&#13;
&#13;
<?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;
&#13;
&#13;

2 个答案:

答案 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
}