如何解决Zend Framework将Doctrine查询结果导出到XML文件
| 我需要将某些查询导出到xml文件。我的工作方式是创建文件并导出数据,但是由于文件正在导出而不显示,我在屏幕上收到以下错误。This page contains the following errors:
error on line 3 at column 1: Extra content at the end of the document
我承认,正如您中大多数人所知,我是新手,但是有没有一种方法可以导出并仅向用户显示确认消息,报告已保存,或者我打算这样做。完全错误的方式?
我的代码如下
我的控制器
public function init()
{
// allow certain reports to be exported to xml
// initialize context switch helper
$contextSwitch = $this->_helper->getHelper(\'contextSwitch\');
$contextSwitch->addActionContext(\'newsletterexport\',\'xml\')
->initContext();
}
public function newsletterexportAction()
{
$q = Doctrine_Query::create()
->select(\'c.firstname,c.lastname,c.address1,c.address2,c.address3,t.county\')
->from(\'PetManager_Model_Clients c\')
->leftJoin(\'c.PetManager_Model_Counties t\')
->where(\'c.consentToNews=1\');
$result = $q->fetchArray();
if (count($result) >= 1) {
$this -> view -> records = $result;
}
}
编辑
好的,我尝试按照建议将代码从xml.phtml移到控制器中,并尝试使用save保存文档,但是现在我得到了xml文档的开始,如下所示,但是没有记录保存到该文档中。
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<petmanager:document xmlns:petmanager=\"http://petmanager\"><petmanager:records/></petmanager:document>
截至本次编辑的我的控制器代码
public function newsletterexportAction()
{
$q = Doctrine_Query::create()
->select(\'c.firstname,t.county\')
->from(\'PetManager_Model_Clients c\')
->leftJoin(\'c.PetManager_Model_Counties t\')
->where(\'c.consentToNews=1\');
$result = $q->fetchArray();
if (count($result) >= 1) {
//$this -> view -> records = $result;
$docpref=\"newsletterexport\";
$docDate=date(\'y-m-d\');
$ext=\".xml\";
$docname=$docpref.$docDate.$ext;
// create XML document
$dom = new DOMDocument(\'1.0\',\'utf-8\');
// create root element
$root = $dom->createElementNS(\'http://petmanager\',\'petmanager:document\');
$dom->appendChild($root);
// convert to SimpleXML
$xml = simplexml_import_dom($dom);
// add resultset elements
$records = $xml->addChild(\'records\');
foreach($this->$result as $r){
$record = $records->addChild(\'record\');
$record->addChild(\'firstName\',$this->escape($r[\'firstName\']));
$record->addChild(\'lastName\',$this->escape($r[\'lastName\']));
$record->addChild(\'address1\',$this->escape($r[\'address1\']));
$record->addChild(\'address2\',$this->escape($r[\'address2\']));
$record->addChild(\'address3\',$this->escape($r[\'address3\']));
$record->addChild(\'county\',$this->escape($r[\'PetManager_Model_Counties\'][\'county\']));
}//end of foreach
// saave document
$xml->saveXML();
$dom->save(\'D:/reports/exports/\'.$docname.\'\');
}
解决方法
“ 5”不采用文件路径-它以文本形式返回XML文档。如果您想像您一样直接将其保存为文件,请使用
DomDocument::save()
。
phtml中的所有逻辑都应该在控制器中。您还已经将上下文设置为xml,因此视图将向浏览器而不是HTML输出XML ...因此,除非确认消息以XML编码,否则id显示确认消息是没有意义的,否则您需要使用默认上下文(HTML)。因此,如果要将文件保存到Web服务器并显示确认,则可以执行以下操作:
public function exportXmlAction(){
// remove the context switch from init
// do your doctrine stuff
// build the xml DOM as $xml
$xml->save(\'path/to/file\');
$this->message = \'File was exported successfully!\';
}
// in your phtml
<?php echo $this->message; ?>
如果要在屏幕上显示xml:
public function exportXmlAction(){
// do your doctrine stuff
// build the xml DOM as $xml
$this->xmlDom = $xml;
}
// in your phtml
<?php echo $this->xmlDom->saveXml(); ?>
我有一个问题,尽管如此,用户是否希望将xml导出到服务器。当您呼叫“ 6”时,将文件保存到服务器上的路径,而不是用户的计算机上,那么将xml导出到用户无法访问的服务器的意义何在?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。