2009-05-10 3 views
4

にレイアウトにアクションからパラメータを渡すことができます。どのようにグローバルのlayout.phpファイルは、各ページのタグが含まれているsymfonyの

<body> 
    <?php echo $sf_content ?> 
</body> 

しかし、サイトのすべての私の内側のHTMLページの、クラスbodyタグに適用されます。

<body class="inner-page"> 
    <?php echo $sf_content ?> 
</body> 

クラスを別のテンプレートからレイアウトに渡すにはどうすればよいですか?

答えて

4
あなたのlayout.phpで

<body <?php if (!include_slot('body_id')): ?>id="default"<?php endif; ?>> 

:ここ

<?php slot('body_id') ?>id="bla"<?php end_slot(); ?> 

または

<?php slot(
    'body_id', 
    sprintf('id="%s"', $sf_params->get('module'))) 
?> 
0

ほとんどのMVCフレームワークでは、ビューファイルにアクセスするのと同じ方法でレイアウト内の変数にアクセスします。

だから、もしあなたが$ this-> view-> my_data = 10;コントロールの中で。レイアウトでは、 echo $ this-> my_dataでアクセスできます。

これは擬似コードで、交響曲のように調整します。あなたのテンプレートで

+0

"Symfony way"はスロットを使用することです。レイアウトファイルにビュー変数が割り当てられていないと考えられます。 – chiborg

4

は、私はsymfonyの1.2+

使用と使用のソリューションですアクションのsetSlot():

$this->getResponse()->setSlot('home_page', 'yes'); 

次にレイアウトでget_slotを()を使用します。

<body class="<?php echo has_slot('home_page') ? 'home-page' : 'inner-page' ?>"> 
0

私はあなたがこれを使用すると、通常のビューファイルからそれを行うだろうと同じように行うことを90%確信しています。したがって、アクション内の変数を設定する限り、layout.phpファイルから変数にアクセスできる必要があります。あなたのアクションで

:のlayout.php

<body class="<?php echo $body_class?>"> 

$this->body_class = "xxx"; 

は、$ body_classが設定されていることを確認するためにいくつかのチェックを実行してください。

+0

これは私がこれについて見つけたものです:http://www.symfonydeveloper.com/2009/03/05/passing-variables-from-an-action-or-module-template-to-a-layout-template/ – Failpunk

+0

私はこれをSymfony 1.2.7で試してみましたが動作しませんでした。 – Failpunk

+0

1.3.6でも動作しません... – morpheous

0

sfConfig :: set( 'name_here'、$ variableHere);
$ variable = sfConfig :: get( 'name_here');

私はこれをたくさん使っています。コードのどこでもこれを使用してください。

関連する問題