2017-09-21 42 views
0

正如我所设想的,try/catch应该执行在catch-block中定义的代码,如果try-block中有任何错误,是正确的吗? 下面的代码不会做that.It会抛出错误,在这种情况下:try/catch-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 
 
    ]); 
 
} 
 
?>

一种用于ponury-kostek提示:

余类LAnrede编程为每个方法的try/catch-块。没有效果! 下面是模型/类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 
 
      ]); 
 
     } 
 
    } 
 

 
}

回答

1

在您的try区块youre使用$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 
} 
+0

Great.ur最好的。我会在这个论坛给你积极的回应 – tklustig

1

是因为那会导致错误use common\modules\lookup\models\LAnrede;线外try/catch块。

更确切地说,你有错误的文件,导入common\modules\lookup\models\LAnrede这就是为什么try/catch块不能 捕获错误。修复在LAnrede错误。

+0

哈?一切都在尝试块!请仔细阅读代码 – tklustig

+0

没有影响见下面 – tklustig

+0

在你的问题中增加'common \ modules \ lookup \ models \ LAnrede'的内容 –