Zend Framework应用程序内容转换为xml的插件

在这一篇博文中Thijs Feryn通过实现Zend_Controller_Plugin_Abstract的hook方法,在原程序没有使用context switching控制器助手的情况下,将返回的内容响应转为为特定的XML格式

地址:http://blog.feryn.eu/2009/05/converting-your-zend-framework-mvc-application-into-an-xml-webservice-using-one-single-plugin/

代码:

<?php
/**
* My_Plugin_Xml component
* Turns an Zend Framework MVC website into an XML webservice
*  File From Liehuo.Net
*/
/**
* My_Plugin_Xml class
*
* @author Thijs Feryn <thijs@feryn.eu>
*/
class My_Plugin_Xml extends Zend_Controller_Plugin_Abstract
{
/**
* Stores the front controller
*
* @var Zend_Controller_Front
*/
private $_front;
/**
* Stores the XML output in DOMDocument format
*
* @var DOMDocument
*/
private $_xml;
/**
* Class constructor
*/
public function __construct()
{
$this->_front = Zend_Controller_Front::getInstance();
$layout = Zend_Layout::getMvcInstance();
$layout->disableLayout();
}
/**
* Build DOMDocument to convert output to XML
*
* @param mixed $return
* @param Exception $exception
* @return string
*/
private function _getXML($return = null,Exception $exception = null)
{
$this->_xml = new DOMDocument(‘1.0’, ‘UTF-8’);
$this->_xml->formatOutput = true;

$responseNode = $this->_xml->createElement(‘response’);

$exceptionNode = $this->_xml->createElement(‘exception’);
if(null !== $exception && $exception instanceof Exception ){
$exceptionNode->appendChild(
$this->_xml->createElement(‘message’,
$exception->getMessage()
)
);
$exceptionNode->appendChild(
$this->_xml->createElement(‘code’,
$exception->getCode()
)
);
$exceptionNode->appendChild(
$this->_xml->createElement(‘type’,
get_class($exception)
)
);
}

$responseNode->appendChild($exceptionNode);
if(null !== $return){
$responseNode->appendChild(
$this->_serialize(‘return’,$return)
);
} else {
$responseNode->appendChild(
$this->_xml->createElement(‘return’)
);
}

$this->_xml->appendChild($responseNode);
return $this->_xml->saveXML();
}
/**
* Modify the HTTP response object
* Remove the HTML body, replace with XML and change the content-type
*
* @param mixed $return
* @param Exception $exception
*/
private function _setResponse($return = false,Exception $exception = null)
{
$this->getResponse()->setHeader(‘Content-Type’,’text/xml; charset=UTF-8′);
$this->getResponse()->clearBody();
$this->getResponse()->setBody(
$this->_getXML($return,$exception)
);
}
/**
* Serialize a mixed value to XML in DOMElement format
* This method can be used recursively in case of objects and arrays
*
* @param string $name
* @param mixed $value
* @return DOMElement
*/
private function _serialize($name,$value)
{
if(is_array($value)){
$element = $this->_xml->createElement($name);
foreach ($value as $k=>$v){
if(is_numeric($k)){
$k = ‘item’;
}
$element->appendChild($this->_serialize($k,$v));
}
} elseif(is_object($value)){
$element = $this->_xml->createElement($name);
$reflection = new ReflectionObject($value);
$properties = $reflection->getProperties();
foreach ($properties as $property){
if($property->isPublic()){
$element->appendChild(
$this->_serialize(
$property->getName(),
$property->getValue($value)
)
);
}
}
}else{
$element = $this->_xml->createElement(
$name,
(string)$value
);
}
return $element;
}
/**
* preDispatch hook that retrieves if an Exception was thrown in the application
* If an exception is thrown, the exception is passed to the exception part of the XML output and script execution is terminated
*
* @param Zend_Controller_Request_Abstract $request
*/
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if($this->getResponse()->isException()){
$exArray = $this->getResponse()->getException();
$this->_setResponse(null,$exArray[0]);
$this->getResponse()->sendResponse();
exit();
}
}
/**
* postDispatch hook that serializes the view object to XML by modifying the HTTP response
* If no exception was thrown script execution continues and the postDispatch method will be called
*
* @param Zend_Controller_Request_Abstract $request
*/
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$view = Zend_Controller_Action_HelperBroker::getExistingHelper(‘ViewRenderer’)->view;
$this->_setResponse($view);
}
}

_getXML()产生特定的xml结构
_setResponse()设置响应的xml内容
_serialize()将返回的对象序列化为xml(使用递归)
preDispatch()判断是否有异常,如果有则只设置异常并终止脚本执行
postDispatch()返回响应

使用方法
$this->_front->registerPlugin(new My_Plugin_Xml());
——–

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Zend Framework应用程序内容转换为xml的插件

127 评论

  1. order suhagra pills sildenafil us estradiol cheap

  2. order tadalafil 40mg Sample viagra pfizer viagra

  3. deltasone 10mg generic cialis 40 mg oral sildenafil

  4. order altace 10mg online cheap clobetasol price buy astelin 10 ml sprayers

  5. buy alendronate 35mg generic order fosamax pill order famotidine 40mg pill

  6. order molnunat 200mg online cheap prevacid 30mg brand prevacid 15mg for sale

  7. fluvoxamine uk cymbalta price buy glipizide online cheap

  8. itraconazole over the counter generic tinidazole purchase tinidazole generic

  9. viagra for sale buy viagra sale lisinopril over the counter

  10. order prilosec money slots slots meaning

  11. purchase aristocort pills loratadine sale buy clarinex 5mg pill

  12. buy generic ceftin robaxin ca order robaxin 500mg

  13. buy sildalis without prescription sildenafil otc order lamictal 200mg pill

  14. buy lasix 40mg online cheap furosemide 100mg us purchase hydroxychloroquine online

  15. buy tadacip 20mg generic indocin uk indomethacin 50mg generic

  16. buy generic nifedipine 10mg allegra pills fexofenadine price

  17. order clobetasol generic generic temovate cordarone 100mg canada

  18. cheap requip 1mg requip 1mg drug order labetalol 100mg online cheap

  19. glucophage 1000mg usa glucophage usa buy nolvadex 20mg online

  20. buy azathioprine 50mg sale naproxen 500mg tablet buy naproxen 250mg without prescription

  21. phenergan order 10mg cialis buy tadalafil 10mg

  22. levofloxacin 500mg generic buy zyban 150 mg order bupropion 150 mg generic

  23. amoxil uk amoxicillin oral order prednisolone without prescription

  24. order isotretinoin 40mg generic amoxil drug order generic azithromycin 250mg

  25. order tenormin 100mg pill oral femara 2.5mg order letrozole without prescription

  26. purchase levothyroxine pill levitra uk buy generic vardenafil

  27. order prometrium 200mg online cheap progesterone pills buy olanzapine 10mg generic

  28. buy nebivolol 5mg generic valsartan tablet buy generic clozaril online

  29. order generic minocycline 100mg hytrin 5mg ca actos pills

  30. order mesalamine 400mg online cheap order avapro pill order avapro 300mg for sale

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡