Es geht darum, dass ich beim aufrufen des Yii::app()->request->getCsrfToken() eine Fehlermeldung : Cannot modify header information – headers already sent…der und der zeiger steht auf Yii::app()->request->getCsrfToken()…bekomme.
Ich habe eine Dash-Navigation erstellt, wo ich buttons mit unterschiedlichen Funktionen definieren kann. eineige davon senden auch Daten mit ajax zum Server. Das ich die csrfValidation auf true gesetzt habe, muss ich ja auch den csrfToken mit schicken…und da kommt es zum Problem.
Ich habe für häufig verwendete Buttons DefaultCommands definiert diese werden in einem seperatem Behavior geladen. Dort habe ich auch die Funktion _validateCsrfData–>Hängt den Tocken an die ajax->data dran. Und wie oben bereits erwähnt tritt dabei der o.g. Fehler auf.
Ich solte nochmal erwähnen, dass die Navi im Adminbereich genutzt wird und ich dafür einen eigenen Controller(AController) habe sowie eine eigenes Theme was ich im AController mit setTheme() definiere.
Hmm…anscheinend liegt es am DataProvider der von vom CActiveDataProvider abgeleitet worden ist. Dieser Sieht wie fogt aus:
<?php
class RNestedDataProvider extends CActiveDataProvider
{
/**
* @property RAuthorizer
*/
private $_authorizer;
public function __construct($userClass,$config=array())
{
parent::__construct($userClass, $config);
$this->_authorizer = Rights::module()->getAuthorizer();
}
/**
* Fetches the data from the persistent data storage.
* @return array list of data items
*/
protected function fetchData()
{
$data=array();
foreach(parent::fetchData() as $model )
{
$item= new RAuthItem(Yii::app()->getAuthManager(),
$model->name,
$model->type,
$model->description,
$model->bizrule,
$model->data,
$model->level,
$model->lft,
$model->rgt);
$data[]= $this->_authorizer->attachAuthItemBehavior($item);
}
return $data;
}
}
?>
Fehlermeldung
Cannot modify header information - headers already sent by (output started at ../components/dataproviders/RNestedDataProvider.php:46)
Diese Meldung erscheint in PHP wenn du versuchst, HTTP Header zu setzen, nachdem du bereits irgendwo was ausgegeben hast. In Yii kannst du das eigentlich nur schaffen, wenn du irgendwo im Controller oder im Model ein echo oder print stehen hast. Am Dataprovider selbst liegts nicht. Das muss irgenwo schon vorher passieren.
Evtl. hast du auch eine Leerzeile oder ein Space irgendwo am Anfang einer deiner PHP-Dateien (Controller, Model oder andere Komponenten). Oder du verwendest UTF-8 mit BOM. All das führt dazu, dass PHP evtl. schon was in den Ausgabepuffer schiebt, wodurch die Header nicht mehr geändert werden können.
EDIT: Was ist denn in Zeile 46 von RNestedDataProvider.php?
Die Fehlermeldung taucht immer nur dann auf, wenn ich auf die Funktion actionIndex zugreiffe, da auch in dieser auf den RNestedDataProvider zugegriffen wird. In der Funktion ist jedoch keine echo/oder print Ausgabe vorhanden.
Ich versuche mal den RNestedDataPtovider neu zu schreiben bzw. die Datei komplett neu zu erstellen. Mal gucken ob es daran gelegen hat.