[..]hat keine Methode namens "getIsNewRecord"[..]

Vorweg: Ich rufe nirgendswo die Methode auf, in meinem ganzen Workspace!!!

Dennoch erhalte ich folgenden Stack trace.

Ich habe einige Methoden in meinem Kontroller add und get genannt. Laut API gibt es keine Methoden die so heißen




exception 'CException' with message 'xxxController hat keine Methode namens "getIsNewRecord".' in E:\Workspace\yii\framework\base\CComponent.php:218 

Stack trace: 

#0 [internal function]: CComponent->__call('getIsNewRecord', Array) 

#1 E:\Workspace\yii\framework\db\ar\CActiveRecord.php(1381): xxxController->getIsNewRecord() 

#2 E:\Workspace\blog2\protected\controllers\xxxController.php(151): CActiveRecord->delete() 

#3 E:\Workspace\yii\framework\web\actions\CInlineAction.php(32): xxxController->actionShow() 

#4 E:\Workspace\yii\framework\web\CController.php(300): CInlineAction->run() 

#5 E:\Workspace\yii\framework\web\filters\CFilterChain.php(129): CController->runAction(Object(CInlineAction)) 

#6 E:\Workspace\yii\framework\web\filters\CFilter.php(41): CFilterChain->run() 

#7 E:\Workspace\yii\framework\web\CController.php(957): CFilter->filter(Object(CFilterChain)) 

#8 E:\Workspace\yii\framework\web\filters\CInlineFilter.php(59): CController->filterAccessControl(Object(CFilterChain)) 

#9 E:\Workspace\yii\framework\web\filters\CFilterChain.php(126): CInlineFilter->filter(Object(CFilterChain)) 

#10 E:\Workspace\yii\framework\web\CController.php(283): CFilterChain->run() 

#11 E:\Workspace\yii\framework\web\CController.php(257): CController->runActionWithFilters(Object(CInlineAction), Array) 

#12 E:\Workspace\yii\framework\web\CWebApplication.php(310): CController->run('show') 

#13 E:\Workspace\yii\framework\web\CWebApplication.php(120): CWebApplication->runController('xxx/show/i...') 

#14 E:\Workspace\yii\framework\base\CApplication.php(135): CWebApplication->processRequest() 

#15 E:\Workspace\blog2\index.php(11): CApplication->run() 

#16 {main} REQUEST_URI=/blog2/xxx/show/id/111376.html

Hmm. Wie sieht denn der Code um Zeile 151 in xxxController.php aus?

Fehler soweit gefunden.

Ich habe eine Methode in meinem Controller delete benannt.

Habe die Methode in remove() umbenannt.

Zeile 151 ist leer :D

Jo, jetzt vielleicht :)

Aber siehe Aufrufstack: In Zeile 151 wurde ein delete() auf ein Objekt vom Typ CActiveRecord ausgeführt. Und in delete() wird dann halt das getIsNewRecord() aufgerufen. Hätt mich jetzt fast interessiert, wie das Zustande kam, dass $this in delete() dann plötzlich als xxxController interpretiert wird.

Nein getIsNewRecord() wird nirgendswo aufgerufen.

Hier der Code aus remove(), Vorgänger delete()


public function remove( $dCroatianId )

{

	$dHits = xxx::model()->getNumberxxx_xxx( ( $dxxxId ));

	if ( $dHits == 0)

	{

		$oXxx = xxx::model()->findByPk( $dXxxId );

		$oXxx->delete();


		$oYyy = yyy::model()->findByAttributes(array('Id' => $dxxxId));

		$oYyy->delete();

		return 0;

	}

	return $dHits;

}

xxxController

Zeile 151 war doch nicht leer, habe im Model versehentlich geguckt, dort gibt es die Zeile nicht ^^


$dHits = xxx::model()->getNumberxxx_xxx( $dId );


public function getNumberxxx_xxx( $dId )

{

	$oCriteria = new CDbCriteria;

	$oCriteria->condition="Id=".$dId;

	return xxx_xxx::model()->count( $oCriteria );

}

Ich meinte im delete() von CActiveRecord (framework-code).

Der Callstack zeigt ja, wie die Aufrufe ineinander verschachtelt sind:

In deinem Controller hast du in 151 CActiveRecord->delete() aufgerufen. Und innerhalb dieser Funktion wird eben getIsNewRecord() aufgerufen.

Den Callstack solltest du dir mal etwas näher ansehen, das hilft ungemein bei Fehlern wie diesen. Tipp: Von unten nach oben lesen!

An deinem Code kann ich auch nicht erkennen, wie das Problem zustande kam (auch nicht mit delete()-Funktion im Controller). Merkwürdig.

jetzt sehe ich auch, dass das lesen von unten nach oben einfacher ist ^^.

Das Problem ist aufjeden Fall weg, nachdem ich die Methode umbenannt habe.