2017-02-03 2 views
0

タグのIDの配列を取り、タグが使用されていないことを確認するための処理を行うajaxメソッドがあります。それから私はjavascriptでタグをレンダリングできるようにクライアントにHTMLを送り返す必要があります。ただ一つのタグで、それは要素のHTMLが含まれています「レンダリング」によって生成された応答の本体として、コントローラからAjaxメソッドは複数の要素をレンダリングする

$this->render('/Element/tag'); 

を呼び出すために些細なのです。自分のタグの配列を各要素に変換し、それをクライアントに返信するにはどうすればよいですか?

+0

(http://stackoverflow.com/a/16092328/7100404)私はこのようなHTMLを送り返すべきではないとだけデータを送信し、JavaScriptで私の要素を構築する必要があります。しかし、何が要素テンプレートを周りに持っているのですか?このユースケースではどのようにテンプレートを活用できますか? – pjenk213

+0

私はその感情には一般的には反対ですが、CakePHPを使ってHTMLをレンダリングすることは絶対に避けています(JavaScript全体でアプリケーションをビルドしてJSONで文字通りすべてを送信してみましょうか?)。それは事実を行う有効ではあるが異なる方法である。 CakePHPは[view routing](https://book.cakephp.org/3.0/en/development/routing.html#routing-file-extensions)を利用して、同じエンドポイントでHTMLを扱うことがあり、JSONデータを別の時に。 – ahoffner

答えて

0

あなたは一度だけrenderを呼び出すことができます - 単にあなたのコントローラー・コードの最後に使用したい「ビュー」を示すと考えます。

あなたが複数のタグをレンダリングするビューが必要な場合は、あなただけの一例/src/Template/Tags/tags.ctpのために、新しいビューを定義することができます。

あなたがタグの配列を含む、あなたのビュー(Tags/tags.ctpファイル)にあなたが欲しいものを渡すことができます。

$tags = ['Tag 1', 'Tag 2']; 

$this->set('tags', $tags); 

$this->render('Tags/tags'); 

を次にtags.ctpの内側に、それぞれをレンダリングするために、タグ要素を使用します。

<?php foreach ($tags as $tag) { 
    echo $this->element('tags', [ 
     "tag" => $tag 
    ]); 
} 
[別の質問にこの回答]によると は
+0

これは[この回答](http://stackoverflow.com/a/4405533/7100404)と同じですが、うまくいくかもしれませんが、あまり乾燥していません。 DRYerのソリューションはありますか? – pjenk213

+0

Elementsの全体のポイントは、Viewsに挿入できる再利用可能なHTMLの短いビットを定義することです。これらのツールは、非常にDRYの原理である複数のViewsからアクセス可能なコードの繰り返しを維持するツールです。あなたが避けたいと思うこの「繰り返し」は何ですか? – ahoffner

+0

私は今、単一のタグをレンダリングする要素と、複数のタグをレンダリングする要素を持っています。私は複数のタグのためのレンダリング()のような種類のデータを送信し、ただ1つの 'タグ'要素を使用できるようにしたい。 – pjenk213

関連する問題