Frage

I'm managing a site built on the Yii Framework and very randomly started to get the following error. Not exactly sure how or why this started happening since the source hasn't been touch.

Appreciate any help. Thanks!

 CException
    Description
    Property "feature.mobile_hero_img" is not defined.
    Source File
    /data/www.zoomiezoom.com/yii/framework/db/ar/CActiveRecord.php(106)
    00094:      */
    00095:     public function __get($name)
    00096:     {
    00097:         if(isset($this->_attributes[$name]))
    00098:             return $this->_attributes[$name];
    00099:         else if(isset($this->getMetaData()->columns[$name]))
    00100:             return null;
    00101:         else if(isset($this->_related[$name]))
    00102:             return $this->_related[$name];
    00103:         else if(isset($this->getMetaData()->relations[$name]))
    00104:             return $this->getRelated($name);
    00105:         else
    00106:             return parent::__get($name);
    00107:     }
    00108: 
    00109:     /**
    00110:      * PHP setter magic method.
    00111:      * This method is overridden so that AR attributes can be accessed like properties.
    00112:      * @param string property name
    00113:      * @param mixed property value
    00114:      */
    00115:     public function __set($name,$value)
    00116:     {
    00117:         if($this->setAttribute($name,$value)===false)
    00118:         {
    Stack Trace
    #0 /data/www.zoomiezoom.com/yii/framework/db/ar/CActiveRecord.php(106): CComponent->__get('mobile_hero_img')
    #1 /data/www.zoomiezoom.com/yii/framework/web/helpers/CHtml.php(1624): CActiveRecord->__get('mobile_hero_img')
    #2 /data/www.zoomiezoom.com/yii/framework/web/helpers/CHtml.php(1100): CHtml::activeInputField('text', Object(feature), 'mobile_hero_img', Array)
    #3 /data/www.zoomiezoom.com/protected/views/feature/_form.php(74): CHtml::activeTextField(Object(feature), 'mobile_hero_img', Array)
    #4 /data/www.zoomiezoom.com/yii/framework/web/CBaseController.php(119): require('/data/www.theax...')
    #5 /data/www.zoomiezoom.com/yii/framework/web/CBaseController.php(88): CBaseController->renderInternal('/data/www.theax...', Array, true)
    #6 /data/www.zoomiezoom.com/yii/framework/web/CController.php(732): CBaseController->renderFile('/data/www.theax...', Array, true)
    #7 /data/www.zoomiezoom.com/protected/views/feature/create.php(14): CController->renderPartial('_form', Array)
    #8 /data/www.zoomiezoom.com/yii/framework/web/CBaseController.php(119): require('/data/www.theax...')
    #9 /data/www.zoomiezoom.com/yii/framework/web/CBaseController.php(88): CBaseController->renderInternal('/data/www.theax...', Array, true)
    #10 /data/www.zoomiezoom.com/yii/framework/web/CController.php(732): CBaseController->renderFile('/data/www.theax...', Array, true)
    #11 /data/www.zoomiezoom.com/yii/framework/web/CController.php(671): CController->renderPartial('create', Array, true)
    #12 /data/www.zoomiezoom.com/protected/controllers/FeatureController.php(71): CController->render('create', Array)
    #13 /data/www.zoomiezoom.com/yii/framework/web/actions/CInlineAction.php(32): FeatureController->actionCreate()
    #14 /data/www.zoomiezoom.com/yii/framework/web/CController.php(300): CInlineAction->run()
    #15 /data/www.zoomiezoom.com/yii/framework/web/filters/CFilterChain.php(129): CController->runAction(Object(CInlineAction))
    #16 /data/www.zoomiezoom.com/yii/framework/web/filters/CFilter.php(41): CFilterChain->run()
    #17 /data/www.zoomiezoom.com/yii/framework/web/CController.php(983): CFilter->filter(Object(CFilterChain))
    #18 /data/www.zoomiezoom.com/yii/framework/web/filters/CInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain))
    #19 /data/www.zoomiezoom.com/yii/framework/web/filters/CFilterChain.php(126): CInlineFilter->filter(Object(CFilterChain))
    #20 /data/www.zoomiezoom.com/yii/framework/web/CController.php(283): CFilterChain->run()
    #21 /data/www.zoomiezoom.com/yii/framework/web/CController.php(257): CController->runActionWithFilters(Object(CInlineAction), Array)
    #22 /data/www.zoomiezoom.com/yii/framework/web/CWebApplication.php(320): CController->run('create')
    #23 /data/www.zoomiezoom.com/yii/framework/web/CWebApplication.php(120): CWebApplication->runController('feature/create')
    #24 /data/www.zoomiezoom.com/yii/framework/base/CApplication.php(135): CWebApplication->processRequest()
    #25 /data/www.zoomiezoom.com/public_html/admin_tae/index.php(13): CApplication->run()
    #26 {main}

schema for feature.php

<?php

class feature extends CActiveRecord
{
    /**
     * The followings are the available columns in table 'feature':
     * @var integer $id
     * @var integer $feature_name_id
     * @var string $display_name
     * @var integer $language_id
     * @var string $long_blurb
     * @var string $short_blurb
     * @var string $subhead_text
     * @var string $hero_img
     * @var string $mobile_hero_img
     * @var string $thumb_sm
     * @var string $thumb_md
     * @var string $thumb_lg
     * @var string $link_url
     * @var string $link_image
     * @var string $link_text
     * @var string $buyit_id
     * @var string $seo_text
     * @var string $meta_description
     * @var string $meta_keywords
     * @var integer $category_id
     * @var integer $sub_cat_id
     * @var string $deep_link
     * @var string $tracking_id
     * @var integer $weight
     * @var integer $initial_rating
     * @var string $active
     * @var string $created
     * @var string $modified
     */

    /**
     * Returns the static model of the specified AR class.
     * @return CActiveRecord the static model class
     */
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return 'feature';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('feature_name_id', 'required'),
            array('feature_name_id, language_id, category_id, sub_cat_id, weight, initial_rating', 'numerical', 'integerOnly'=>true),
            array('active', 'length', 'max'=>1),
            array('display_name, long_blurb, short_blurb, subhead_text, page_title, hero_img, mobile_hero_img, thumb_sm, thumb_md, thumb_lg, link_url, link_image, link_text, buyit_id, seo_text, meta_description, meta_keywords, deep_link, tracking_id, created', 'safe'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        // 'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)
        return array(
            'feature_name' => array(self::BELONGS_TO, 'feature_name', 'feature_name_id', 'alias'=>'feature_name'),
            'language' => array(self::BELONGS_TO, 'language', 'language_id', 'on'=>'t.language_id = language.id', 'alias'=>'language'),
            'category' => array(self::BELONGS_TO, 'category', 'category_id', 'alias'=>'category'),
            'sub_cat' => array(self::BELONGS_TO, 'sub_cat', 'sub_cat_id'),
            'language_r' => array(self::BELONGS_TO, 'language', 'language_id', 'alias'=>'language'),
        );
    }
    /**
     * @return array Named Scopes.
     */
    public function scopes()
    {
        return array(
            'active'=>array(
                'condition' => 't.active="y"',
                'order' => 'feature_name.type_id DESC, category_id, sub_cat_id, t.weight ASC',
            ),
        );

    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'id' => 'Id',
            'feature_name_id' => 'Feature Name ID',
            'display_name' => 'Display Name',
            'language_id' => 'Language',
            'long_blurb' => 'Main Description',
            'short_blurb' => 'Short Blurb',
            'subhead_text' => 'Subhead Text',
            'page_title' => 'Browser Title',
            'hero_img' => 'Hero Img',
            'mobile_hero_img' => 'Mobile Hero Img',
            'thumb_sm' => 'Small Thumbnail',
            'thumb_md' => 'Medium Thumbnail ',
            'thumb_lg' => 'Large Thumbnail',
            'link_url' => 'CTA Link Url',
            'link_image' => 'CTA Link Image',
            'link_text' => ' CTA Link Text',
            'buyit_id' => ' BuyIt Link Product ID',
            'seo_text' => 'SEO Copy',
            'meta_description' => 'Meta Description',
            'meta_keywords' => 'Meta Keywords',
            'category_id' => 'Category',
            'sub_cat_id' => 'Sub Category',
            'deep_link' => 'Deep Link',
            'tracking_id' => 'Tracking ID',
            'weight' => 'Weight',
            'initial_rating' => 'Initial Rating',
            'active' => 'Active',
            'created' => 'Created Date',
            'modified' => 'Modified Date',
        );
    }
}
War es hilfreich?

Lösung

Here is your clue :

#3 /data/www.zoomiezoom.com/protected/views/feature/_form.php(74): CHtml::activeTextField(Object(feature), 'mobile_hero_img', Array)

You are pointing to a field in your feature model that does not exist.

It's there in the model. Is is in the feature table, and are you pointing to the correct model in the form.

Andere Tipps

I am guessing that you are trying to access a property of a model which extends CActiveRecord.

This means that:

Either you HAD defined this property (mobile_hero_img) and now it is removed

OR

You changed the database schema by dropping a column (mobile_hero_img) from a table (the table that your model class relates to).

It looks like an issue from your DB field.

Did you add a new input field "mobile_hero_img" in the form without adding the field it to the database? Please provide the schema of your "feature" table.

For everyone struggling with "Property is not defined" issue I have one suggestion: check your model's rules() definition and framework's version because there's a bug introduced in Yii (1.1.16) which leads to this error if there is additional space at the end of attributes' list:

// author_id WILL NOT WORK!!
array('app_id, group_id, author_id ', 'required'),

This is fixed in Yii 1.1.17.

The "Property n is not defined" issue can also occur if you have set (text) type of a field and in your model while defining a property, you may have defined it as a boolean or integer.

For example, the below is wrong for text type property.

 * @property boolean $billing_address

The right definition will be

 * @property string $billing_address

Sometimes there is a small mistake that takes hours to be traced.

I had a same issue. Everything was perfect in the Model class but the problem is still on. Restart the server or SQL does not help. At last, I clear the protected/runtime/cachexxxx.db file, then everything working fine. I modified the tables with migrate file, and sometimes got error so maybe something is mixed.

My problem was solved when I upgraded to yii 1.1.17

Regards

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top