Zend使用上下文切换以xml格式获取db数据

时间:2011-03-04 06:26:12

标签: php zend-framework

我很想知道如何使用上下文切换在Zend框架中以xml格式获取数据库数据。

我是否需要在我的网址中强制指定格式,例如:

  

http://localhost/pt/public/index.php/api/v1/users.xml?param1=3

我想从url(.xml,.json ...)获取格式,并自动将相应的格式应用于我的输出。

目前iam这样做:我从数据库中获取用户数据。我根据传递给url的类ID获取用户标记:

$id = $request->getParam('param1'); // get class id param
$users = new Application_Model_DbTable_Users(); 
$result = $users->fetchData($id);

if(count($result) != 0)
        {
            $doc = new DOMDocument();
            $doc->formatOutput = true;
            $root = $doc->createElement("Student");
            $doc->appendChild($root);



            foreach($result as $details)
            {
             $root_element = $doc->createElement("Marks");
             $root->appendChild($root_element);

             $TElement = $doc->createElement("Total");
             $TElement->appendChild($doc->createTextNode($details->marks));
             $root_element->appendChild($TElement);
                        }

                        $xml =  $doc->saveXML();
            $this->view->xml  = $xml;
                       }     

在相应的视图脚本中,我有这段代码:

<?php 
header('Content-type: text/xml');
echo $this->xml;
?>

我获取用户数据并使用DOMDocument将xml输出写入视图。但是,是否可以从数据库自动生成XML数据,而不使用DOM?

2 个答案:

答案 0 :(得分:3)

emaillenin是对的,ZF无法将您的数据转换为XML。

但我建议你不要手动形成XML(使用DOMDocument等),而是先看看PEAR XML_Serializer package

XML_Serializer允许您将数组,对象等转换为格式良好的XML。您还可以指定根名称,默认标记名称,缩进类型等。因此,您几乎可以控制生成的XML

答案 1 :(得分:1)

Zend上下文切换有助于更改标题,禁用布局和这些帮助。它无法将数据库数据作为XML数据返回。

将数据库数据转换为带有标记的XML格式数据后,可以使用以下代码返回XML输出。

class OutputController extends Zend_Controller_Action
{
    public function xmlAction()
    {
        $xml = simplexml_load_string($sourceData);
        $output = $xml->saveXML();
        Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
        $this->_helper->layout->disableLayout();
        Zend_Layout::getMvcInstance()->disableLayout();
        header('Content-Type: text/xml');
 echo $output;

        exit();
    }
}

如果您提供有关如何从数据库检索数据的更多信息以及输出中所需的XML格式(标记的层次结构),我将更新答案。