2016-01-30 2 views
0

Мне нужно преобразовать массив в ответ XML. Цель состоит в том, чтобы написать функцию в контроллере плагина и вызвать ее, которая вернет ответ XML.CakePHP 3 Создание представления 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

Вы должны быть осторожны с техническими терминами, что именно вы имеете в виду с «_response_»? HTTP-ответ или отображаемый контент представления данных? – ndm

+0

Я имел в виду HTTP-ответ. –

+0

Итак, зачем вам это делать в вашем приложении? Не можете ли вы просто использовать сетевую консоль браузеров и проверить фактический полученный ответ? – ndm

ответ

2

в routes.php, вставить

Router::extensions('xml'); 

непосредственно перед

Router::defaultRouteClass('DashedRoute'); 

затем просто использовать ".xml" в YOUT действия:

/yourController/index.xml

0

Я новичок в cakePhp и используя cackephp 3 (v 3.5). В моем случае просто добавление Router::extensions('xml');

к маршрутам.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 и AJAX макет набор cacke в - /src/Template/Layout/ajax.ctp (он содержит только эхо оператор):

echo $this->fetch('content'); 

в моей routes.php файле

// sitemap index 
Router::scope(
    '/sitemap.xml', 
    ['controller' => 'Sitemap'], 
    function ($routes) { 
     $routes->connect(
      '/', 
      ['action' => 'index'] 
     );    
    } 
); 

Почти так же, как она работает для JSon типа контента.

Смежные вопросы