1

アプリケーションで XML+XSL テンプレートをレンダリングする必要があり、以前は CakePHP 3.0 で動作していました。最近 3.1 に切り替えましたが、動作しなくなりました。問題は、XML の書式設定されたビューを持っていたのに、今は単純な文字列しか得られないことです。

移行ガイドには、のいくつかの変更について何かが書かれていRequestHandlerComponentますが、何の役にも立ちません (あるいは、それは私だけで、要点がわかりません :))。

これは私のコントローラーです (Cake3.0 の場合とまったく同じです):

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Utility\Xml;
use Cake\Event\Event;
use Cake\Routing\Router;
use Cake\ORM\TableRegistry;
use Cake\Filesystem\Folder;
use Cake\Filesystem\File;
use Cake\Network\Email\Email;
use Cake\Core\Configure;
use Cake\I18n\Time;

/**
 * Invoices Controller
 *
 * @property App\Model\Table\InvoicesTable $Invoices
 */
class InvoicesController extends AppController
{
    public $components = [
        'Browser',
        'Reorder11'
    ];
    public $helpers = [
        'Multiple'
    ];
    public $paginate = [];

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Paginator');
        $this->loadComponent('RequestHandler');
    }

    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['demo']);
    }

    /*
    * ... several other functions ...
    */

    public function viewxml($id = null)
    {
        $this->viewBuilder()->layout('xml');
        $invoice = $this->Invoices->myInvoice($id, $this->Auth->user('id'));

        $this->RequestHandler->respondAs('xml');
        $this->set('invoice', $invoice);
    }
}

実にxml.ctpシンプルなレイアウト

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

viewxml.ctpテンプレートはxmlを文字列としてエコーするだけです。

フォーマットされた XML+XSL を再度取得するにはどうすればよいですか?

4

1 に答える 1

0

追加してみてください: $this->response->header(['Content-type' => 'application/xml']);

同じエラーが発生しましたが、出力は pdf でした

このコードを使用して 3.0.14 を動作させる:

$this->RequestHandler->respondAs("pdf");
$this->layout = 'pdf/default';
$this->view = 'pdf/report1_pdf';

3.1.x の場合 (これは、ファイルを保存して後で開くと機能します。ブラウザで直接開こうとすると、プレーン ファイルの内容が txt/html として出力されます):

$this->viewBuilder()->layout('pdf/default');
$this->viewBuilder()->template('pdf/report1_pdf');
$this->RequestHandler->respondAs('pdf');
$this->response->header(['Content-type' => 'application/pdf']);
于 2015-11-06T15:10:59.153 に答える