我需要将数组转换为XML响应。目标是在插件控制器中编写一个函数并调用它,这将返回一个XML响应。
我一直在尝试使用CakePHP手册中提到的以下代码。
namespace App\Controller;
class ArticlesController extends AppController{
public function initialize(){
parent::initialize();
$this->loadComponent('RequestHandler');
}
public function index(){
// Set the view vars that have to be serialized.
$this->set('articles', $this->paginate());
// Specify which view vars JsonView should serialize.
$this->set('_serialize', ['articles']);
}
}
有没有办法可以调试或修改响应,看看XML响应的确切程度如何?
答案 0 :(得分:2)
,插入
Router::extensions('xml');
之前
Router::defaultRouteClass('DashedRoute');
然后,在你的行动中使用“.xml”:
/yourController/index.xml
答案 1 :(得分:0)
我是cakePhp的新手,并使用cackephp 3(v 3.5)。在我的情况下只是添加
Router::extensions('xml');
到routes.php没有帮助。 我使用了更复杂的解决方案,但它运行正常。 在我的SitemapController控制器(/src/controller/SitemapController.php)中:
namespace App\Controller;
use Cake\Routing\Router;
class SitemapController extends AppController
{
public function initialize()
{
parent::initialize();
// Set the response Content-Type to xml for each action
$this->response->type(['xml' => 'application/xml']);
$this->response = $this->response->withType('xml');
// set layout
$this->viewBuilder()->setLayout('ajax');
}
/**
* Shows index sitemap, which contains all the site's sitemaps (like pages)
*/
public function index()
{
// ... some code here
// just set the view vars to show in XML
$this->set('baseUrl', Router::url('', true));
}
// ... other code here
}
我已将响应类型设置为XML并设置cacke的ajax布局 - /src/Template/Layout/ajax.ctp(它只包含echo运算符):
echo $this->fetch('content');
在我的routes.php文件中
// sitemap index
Router::scope(
'/sitemap.xml',
['controller' => 'Sitemap'],
function ($routes) {
$routes->connect(
'/',
['action' => 'index']
);
}
);
几乎与json类型的内容一样。