1

CakePHP で動的 xml ドキュメントを生成してブラウザに出力しようとしています。

これが私のコントローラーコードです:

Configure::write ('debug', 0);
$this->layout = null;
header('Content-type: text/xml');
echo "<?xml version=\"1.0\"?>";

ビューは次のようなものです。

<abc>
     something
</abc>

出力はおそらく期待どおりです。

<?xml version="1.0"?><abc>something</abc>

唯一の問題は<?xml、エラーの前にスペースがあることです。

XML Parsing Error: XML or text declaration not at start of entity
Line Number 1, Column 2:
 <?xml version="1.0"?><abc> something </abc>
-^

私はPHPでこの問題を知っています.php-startタグとendタグがあるとスペースが残り、問題が発生するため、echo "<?xml ver...それを避けるために行をビューからコントローラーに移動しようとしましたが、役に立ちませんでした.

前もって感謝します。-ハッピーハーディク

4

3 に答える 3

3

はい、問題は、php 終了タグのどこかの後のスペースにあるはずです。

php 終了タグは必須ではないため、すべてのモデル (存在する場合)、対象のコントローラー、app_controller.php と app_model.php、およびビュー ヘルパーから終了タグを削除します。どこかにあるはずですが、見つけるのは簡単ではありません

編集:実際には、php begin タグの前にスペースを入れることもできます。これらのファイルを調べて、begin タグがファイルの絶対先頭にあることを確認してください。

再度編集: 自動的にそれを行うためのスクリプトを作成した人がいます。以下を参照してください。

http://ragrawal.wordpress.com/2007/11/07/script-for-removing-blank-spaces-before-and-after-php-tags/

于 2009-11-07T07:21:52.567 に答える
0

これは質問に直接答えませんが。上記のように手動で作成したくない場合に備えて、CakePHP の JSON および XML ビュー ヘルパーを使用して動的な XML ビューを自動的に作成するのがいかに簡単であるかについて言及する価値があると思いました。

  • Router::parseExtensions();ステップ 1: routes.php ファイルに追加します
  • ステップ 2: 追加して、RequestHandler コンポーネントが関連するカウンターローラーに含まれていることを確認します。public $components = array('RequestHandler');
  • ステップ 3: これで、いくつかのデータをロードして、そのデータを XML または JSON として自動的に表示するだけで済みます。以下のようなものを追加します。

    public function xml_view () {
       $this->set('data_array', $this->Model->find('all'));
       $this->set('_serialize', array('data_array'));       
    }
    

文字通り、xml_view アクションの XML または JSON 応答を生成するために必要なことはこれだけです。ビューファイルを設定する必要さえありません。リクエストが .../controller/xml_view.xml の場合、CakePHP は XML ドキュメントを返します。拡張子が .json の場合、JSON レスポンスが生成されます。簡単すぎて信じられない!

于 2012-12-04T00:06:28.987 に答える
0

実際、レイアウト ファイルの終了 ?> タグの後のスペースであることが最も多いことがわかりました。

また、routes.php で RequestHandler コンポーネントと Router::parseExtensions( 'xml' ) を使用すると、xml ビューで使用する XmlHelper が自動的に取得されることも知っておく必要があります。

XmlHelper にはいくつかの優れた機能があります。見てみな。

<?php
    echo( $xml->header( ));
    // outputs <?xml version="1.0" encoding="UTF-8" ?>
?>

RequestHandler コンポーネントと XmlHelper のリンク

http://book.cakephp.org/view/174/Request-Handling

http://book.cakephp.org/view/380/XML

于 2009-11-12T00:27:41.680 に答える