0
私はSymfony2を使ってアプリケーションを開発しています。私が持っている問題は、ページコントローラから呼び出されたリポジトリから関数を実行するときに、関数がXMLファイルを保存することになっていますが、XMLファイルが保存されていないため、その理由がわかりません。これは、リポジトリからの関数である。Symfony2リポジトリからxmlファイルを保存する
public function IdaztekoaSortu($Hitzak, $Coref)
{
$EmaitzaXML = new \DOMDocument("1.0");
header("Content-Type: text/plain");
// erroa sortu
$erroa = $EmaitzaXML->createElement("Idaztekoa");
$EmaitzaXML->appendChild($erroa);
$EmaitzaXML->formatOutput = true;
$xmlHitzakDok = new \DOMDocument();
$xmlMarkDok = new \DOMDocument();
if($xmlHitzakDok->load($Hitzak) === FALSE){die('Errorea hitzen xml-a kargatzean');}
if($xmlMarkDok->load($Coref) === FALSE){die('Errorea markagarrien xml-a kargatzean');}
$xPath_Hitzak = new DOMXPath($xmlHitzakDok);
$xPath_Mark = new DOMXPath($xmlMarkDok);
$xPath = new DOMXPath($xmlHitzakDok);
$Hurrengo_HitzaID = "word_1";
$Hurrengo_Hitza_index = 1;
foreach ($xPath_Hitzak->query('//words/word') AS $Hitza)
{
$HitzaID = $Hitza->getAttribute('id');
if ($HitzaID == $Hurrengo_HitzaID)
{
$Handiena_MarkID = 0;
$Handiena_Hitzarentzat = -1;
$Hitza_Index = substr($HitzaID , 5);
foreach ($xPath_Mark->query('//markables/markable') AS $Markagarria)
{
$MarkID = $Markagarria->getAttribute('id');
$Zatiak = explode("..", $Markagarria->getAttribute('span'));
$MarkSpan1 = substr($Zatiak[0],5);
$MarkSpan2 = substr($Zatiak[1],5);
$MarkSpan1ID = "word_" . $MarkSpan1;
if ($MarkSpan1ID == $HitzaID && $MarkSpan2-$MarkSpan1 > $Handiena_Hitzarentzat)
{
$Handiena_MarkID = $Markagarria->getAttribute('id');
$Handiena_Hitzarentzat = $MarkSpan2-$MarkSpan1;
$Handiena_MarkSpan1 = $MarkSpan1;
$Handiena_MarkSpan2 = $MarkSpan2;
}
}
if($Handiena_Hitzarentzat == -1)
{//Ez daude inongo markagarritan
$x = $Hitza_Index+1;
$Hurrengo_HitzaID = "word_" . $x;
// umea sortu
$elem = $EmaitzaXML->createElement("testua");
$erroa->appendChild($elem);
// testu nodoa sortu
$testua = $EmaitzaXML->createTextNode($Hitza->nodeValue. " ");
$elem->appendChild($testua);
// atributu nodoa sortu
$Mark_id = $EmaitzaXML->createAttribute("Mark_id");
$elem->appendChild($Mark_id);
// atributu balio nodoa sortu
$gauzabalioa = $EmaitzaXML->createTextNode("null");
$Mark_id->appendChild($gauzabalioa);
}
else
{//Markagarri batean daude
$y = $Handiena_MarkSpan2+1;
$Hurrengo_HitzaID = "word_" . $y;
// umea sortu
$elem = $EmaitzaXML->createElement("testua");
$erroa->appendChild($elem);
// testu nodoa sortu
for ($i = $Handiena_MarkSpan1; $i <= $Handiena_MarkSpan2; $i++)
{
foreach ($xPath->query('//words/word') AS $Hitz)
{
$ID = $Hitz->getAttribute('id');
$ID_Index = substr($ID , 5);
if ($ID_Index == $i)
{
$testua = $EmaitzaXML->createTextNode($Hitz->nodeValue . " ");
$elem->appendChild($testua);
}
}
}
// atributu nodoa sortu
$Mark_id = $EmaitzaXML->createAttribute("Mark_id");
$elem->appendChild($Mark_id);
// atributu balio nodoa sortu
$gauzabalioa = $EmaitzaXML->createTextNode($Handiena_MarkID);
$Mark_id->appendChild($gauzabalioa);
// atributu nodoa sortu
$Hitz_kop = $EmaitzaXML->createAttribute("Hitz_kop");
$elem->appendChild($Hitz_kop);
// atributu balio nodoa sortu
$hitzkopbalioa = $EmaitzaXML->createTextNode($Handiena_MarkSpan2-$Handiena_MarkSpan1+1);
$Hitz_kop->appendChild($hitzkopbalioa);
// atributu nodoa sortu
$MSpan1 = $EmaitzaXML->createAttribute("MarkSpan1");
$elem->appendChild($MSpan1);
// atributu balio nodoa sortu
$MSpan1balioa = $EmaitzaXML->createTextNode($Handiena_MarkSpan1);
$MSpan1->appendChild($MSpan1balioa);
// atributu nodoa sortu
$MSpan2 = $EmaitzaXML->createAttribute("MarkSpan2");
$elem->appendChild($MSpan2);
// atributu balio nodoa sortu
$MSpan2balioa = $EmaitzaXML->createTextNode($Handiena_MarkSpan2);
$MSpan2->appendChild($MSpan2balioa);
}
}
}
// zuhaitza fitxategian gorde
$EmaitzaXML->save('Idat.xml');
}
あなたはXMLツリーがIdat.xmlに保存する必要がありますが、それは仕事をdoesntのと私はなぜ知らない見ることができるように。何か案が?私はIdat.xmlがSymfony/webに保存されていると思いますが、私が知っている限り、このフォルダに書き込む権限があります。
この$ EmaitzaXML-> save($ this-> get( 'kernel') - > getRootDir()。 '/ Idat.xml');それはうまくいっていませんでした。他の方法で試しましたが、Idat.xmlファイルが保存されませんでした。任意のアイデア@ a.tereschenkov? – Haritz
なぜheader( "Content-Type:text/plain")を使用しますか?この関数では?私にとってはあなたはここでそれを必要としません。また、コントローラや他のコンポーネントからのみ$ this-> get( 'kernel')を使うこともできます。カスタムクラスでそれを使用すると、動作しません。 $ this-> get( 'kernel') - > getRootDir()をエコーして正しいかどうかを調べることができます。 –