1

ビューでコードを再利用したい場合、Symfony には 2 つの基本的なメカニズムがあります: パーシャルとスロットです。パーシャルは、グローバル パーシャル (任意のモジュールで使用できます) とモジュール パーシャル (特定のモジュールでのみ使用可能) を定義できるため、便利です。

ただし、CakePHP では、通常のテンプレートと要素しかなく、後者はどのモデル/コントローラーに関係なく、すべてのビューで使用できます。

CakePHP には Symfony のパーシャルのようなものがありますか? たとえば、モデルのフォーム コードが重複しないようにするとよいでしょう。共通のフォームを「含める」 2 つのテンプレート (追加と編集) を持つことができます。

要素を引き続き使用できることは知っていますが、モジュール用の「ローカル」要素ディレクトリを使用すると、物事がより整理されるようです。これをシミュレートするための回避策を提案できますか?

ありがとう!

4

2 に答える 2

3

コントローラー固有のビュー ディレクトリ内にビュー (module_partial.ctp) を作成してみませんか。これにより、関連付けたいコントローラーに固有のコードが保持されます。たとえば、books コントローラーがあるとします。BooksController 固有のフォームをいくつかの book ビューに追加したいとします。

views/books/次のディレクトリにビューを作成します。search_partial.ctp

にはsearch_partial.ctp、必要な HTML コードが含まれます。

次に、任意のビューで次のように呼び出します。

<?php echo $this->render('search_partial'); ?>

これにより、他のコントローラー ビューによる読み込みが妨げられることはありませんが、コード ベースの読み取りと分離が期待どおりに維持されます。

すべてのグローバルがビュー/要素に入ります。

于 2011-04-21T20:15:50.493 に答える
0

要素をプラグインに入れることができます。

$this->element('something'); のようなことができます。レイアウトで、プラグインやメインアプリビューフォルダーに要素を持っています...

App/plugins/a_plugin/views/elements/something.ctp //only called when a controller from 'a_plugin' is called.

App/views/elements/something.ctp // called if the current plugin does not have 'something.ctp' in the elements folder

add/edit のようなビューを複製しない場合は、このhttps://github.com/infinitas/infinitas/blob/beta/app_controller.php#L389を参照してください。

于 2011-04-21T18:39:02.330 に答える