コンポーネントスロットで表示/非表示

symfony1.0系にて。

module単位でHTMLの一部分の表示/非表示をコンポーネントスロットを使ってやろうとすると、
うまく動いてくれなくて困ってた。


やりたいことはこんな感じ

  • layoutにてinclude_component_slot()
  • moduleAでは表示
  • moduleBでは非表示
  • できるだけいろんなところに多くの設定を書きたくない


コンポーネントスロットの設定はview.ymlでやる。
設定できる箇所

  • apps/myapp/config/view.yml
  • apps/myapp/modules/moduleA/config/view.yml
  • apps/myapp/modules/moduleB/config/view.yml

初期値ありでmoduleで空で上書き→NG

  • apps/myapp/config/view.yml
default:
  components:
    hoge_block:  [top, hoge]
  • apps/myapp/modules/moduleA/view.yml
    • なし
  • apps/myapp/modules/moduleB/view.yml
all:
  components:
    hoge_block:  []


空で上書きしてくれないので、

xxxSuccess:
  components:
    hoge_block:  []

とすべてのアクション分書かないといけない。

初期値=空、表示するmoduleで設定→OK

  • apps/myapp/config/view.yml
default:
  components:
    hoge_block:  []
  • apps/myapp/modules/moduleA/view.yml
all:
  components:
    hoge_block:  [top, hoge]
  • apps/myapp/modules/moduleB/view.yml
    • なし

そもそも

使い方間違えてるのかなー。

基本は表示で、非表示にするmoduleのところだけ、空で上書きしたいんだけどなー。
[top, hoge]とかいろんなところに書きたくないなー。