Как отследить ошибку, используя YII Framework? - PullRequest
1 голос
/ 17 октября 2011

Я изучаю Yii Framework, и я получил эту ошибку, которая на самом деле не указывает на конкретные страницы, над которыми я работаю, или, насколько я могу судить, показывает мне, с чего мне следует начать поиск своей проблемы.

Как мне понять это? Насколько я вижу, все мои ссылки на type_id напечатаны правильно.

    CException

Description

Property "Project.type_id" is not defined.

Source File

/Users/user/Dropbox/localhost/yii/framework/db/ar/CActiveRecord.php(107)

00095:      */
00096:     public function __get($name)
00097:     {
00098:         if(isset($this->_attributes[$name]))
00099:             return $this->_attributes[$name];
00100:         else if(isset($this->getMetaData()->columns[$name]))
00101:             return null;
00102:         else if(isset($this->_related[$name]))
00103:             return $this->_related[$name];
00104:         else if(isset($this->getMetaData()->relations[$name]))
00105:             return $this->getRelated($name);
00106:         else
00107:             return parent::__get($name);
00108:     }
00109: 
00110:     /**
00111:      * PHP setter magic method.
00112:      * This method is overridden so that AR attributes can be accessed like properties.
00113:      * @param string property name
00114:      * @param mixed property value
00115:      */
00116:     public function __set($name,$value)
00117:     {
00118:         if($this->setAttribute($name,$value)===false)
00119:         {
Stack Trace

#0 /Users/user/Dropbox/localhost/yii/framework/db/ar/CActiveRecord.php(107): CComponent->__get('type_id')
#1 /Users/user/Dropbox/localhost/trackstar/protected/views/project/_view.php(15): CActiveRecord->__get('type_id')
#2 /Users/user/Dropbox/localhost/yii/framework/web/CBaseController.php(119): require('/Users/user/Dro...')
#3 /Users/user/Dropbox/localhost/yii/framework/web/CBaseController.php(88): CBaseController->renderInternal('/Users/user/Dro...', Array, true)
#4 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(748): CBaseController->renderFile('/Users/user/Dro...', Array, true)
#5 /Users/user/Dropbox/localhost/yii/framework/zii/widgets/CListView.php(215): CController->renderPartial('_view', Array)
#6 /Users/user/Dropbox/localhost/yii/framework/zii/widgets/CBaseListView.php(152): CListView->renderItems()
#7 [internal function]: CBaseListView->renderSection(Array)
#8 /Users/user/Dropbox/localhost/yii/framework/zii/widgets/CBaseListView.php(135): preg_replace_callback('/{(\w+)}/', Array, '{summary}?{sort...')
#9 /Users/user/Dropbox/localhost/yii/framework/zii/widgets/CBaseListView.php(121): CBaseListView->renderContent()
#10 /Users/user/Dropbox/localhost/yii/framework/web/CBaseController.php(174): CBaseListView->run()
#11 /Users/user/Dropbox/localhost/trackstar/protected/views/project/index.php(17): CBaseController->widget('zii.widgets.CLi...', Array)
#12 /Users/user/Dropbox/localhost/yii/framework/web/CBaseController.php(119): require('/Users/user/Dro...')
#13 /Users/user/Dropbox/localhost/yii/framework/web/CBaseController.php(88): CBaseController->renderInternal('/Users/user/Dro...', Array, true)
#14 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(748): CBaseController->renderFile('/Users/user/Dro...', Array, true)
#15 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(687): CController->renderPartial('index', Array, true)
#16 /Users/user/Dropbox/localhost/trackstar/protected/controllers/ProjectController.php(148): CController->render('index', Array)
#17 /Users/user/Dropbox/localhost/yii/framework/web/actions/CInlineAction.php(32): ProjectController->actionIndex()
#18 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(300): CInlineAction->run()
#19 /Users/user/Dropbox/localhost/yii/framework/web/filters/CFilterChain.php(129): CController->runAction(Object(CInlineAction))
#20 /Users/user/Dropbox/localhost/yii/framework/web/filters/CFilter.php(41): CFilterChain->run()
#21 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(999): CFilter->filter(Object(CFilterChain))
#22 /Users/user/Dropbox/localhost/yii/framework/web/filters/CInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain))
#23 /Users/user/Dropbox/localhost/yii/framework/web/filters/CFilterChain.php(126): CInlineFilter->filter(Object(CFilterChain))
#24 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(283): CFilterChain->run()
#25 /Users/user/Dropbox/localhost/yii/framework/web/CController.php(257): CController->runActionWithFilters(Object(CInlineAction), Array)
#26 /Users/user/Dropbox/localhost/yii/framework/web/CWebApplication.php(320): CController->run('')
#27 /Users/user/Dropbox/localhost/yii/framework/web/CWebApplication.php(120): CWebApplication->runController('project')
#28 /Users/user/Dropbox/localhost/yii/framework/base/CApplication.php(135): CWebApplication->processRequest()
#29 /Users/user/Dropbox/localhost/trackstar/index.php(12): CApplication->run()
#30 {main}
2011-10-17 18:17:18 Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8r DAV/2 PHP/5.3.6 Yii Framework/1.1.2

Ответы [ 3 ]

1 голос
/ 21 октября 2011

Краткий ответ

Если у класса Project нет свойства объекта $type_id, он проверит, существует ли в таблице БД столбец type_id для этой модели.

Long

Кроме того, если столбец все еще не найден, он попытается найти метод с именем getType_id(), объяснение здесь.

Yii реализует методы PHP Magic __get ($ name) и __set ($ name, $ value), позволяют вам, особенно в CActiveRecord, получать доступ к атрибутам, сгенерированным из столбцов в таблицах БД, или другим обычным атрибутам из класса, используя следующий синтаксис.

object->isNewRecord; // '__get()' is called
object->getIsNewRecord(); // regular syntax without magic method

object->isNewRecord = true; // '__set()' is called
object->setIsNewRecord(true);
1 голос
/ 11 ноября 2011

Проблема в том, что одно из ваших представлений считает, что ваша модель обладает этим свойством. Например, я удалил столбец из модели, но я, например, вызывал представление (_search), и это имело ссылку на этот столбец:

<?php echo $form->label($model,'thumbnail'); ?>
25 
<?php echo $form->textField($model,'thumbnail',array('size'=>60,'maxlength'=>255)); ?>

Я использовал:

find . -name "*" | xargs grep -l "my_property"

чтобы разыскать нарушителя

1 голос
/ 19 октября 2011

в файле /Users/user/Dropbox/localhost/trackstar/protected/views/project/_view.php в строке 15 есть что-то вроде $ project-> type_id Но в модели вашего проекта нет свойства "type_id"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...