2017-09-05 9 views
0

私はsymfonyアプリケーションで動作しています。すべてのコントローラからすべてのレンダリングに新しい変数を設定したいと思います。すべてのレンダリングに変数を追加する

なぜなら、私のフッターの中の何かが動的になり、MVCパターンに準拠しているので、この新しいデータの処理をコントローラに入れたいと思うからです。

symfonyでこれを行うには良い方法はありますか?私は、RESTのAPIとしてはsymfonyを使用していない

EDIT

、symfonyのサーバはHTMLとしてレンダリングされた小枝のテンプレートを提供しています。私の場合上

詳細:

現在の小枝テンプレートは、フォームのハードコードされたタイトルを持っています

<div> 
    <h2>Today</h2> 
    <!-- today's inputs .... --> 
</div> 
<div> 
    <h2>Tomorrow</h2> 
    <!-- tomorrow's inputs .... --> 
</div> 

私は私の意見に、変数に与えたいと思います:$today$tomorrow 。 この方法では、今日または明日の代わりに曜日名を表示することができます。例えば

<div> 
    <h2>{{ today }}</h2> 
    <!-- today's inputs .... --> 
</div> 
<div> 
    <h2>{{ tomorrow }}</h2> 
    <!-- tomorrow's inputs .... --> 
</div> 

今日は火曜日であれば、変数はこのよう割り当てる必要があります: $today = "Tuesday"$tomorrow = "Wednesday"を。

より何

これは、この特定のケースについての質問ではありません。すべてのコントローラを編集せずに変数をすべてのビューに渡す方法がある場合は、今すぐにしたいと思います。私が見ているように、私はこの変数を生成するためにすべてのコントローラに親アクションを設定します。私はちょうどこれがいつもの方法かどうかを知りたがっていました。

私はajaxコールを使いたくないので、私はテンプレートの中に複雑な小枝のコードを入れたくありません。私はコントローラを介してこれを処理したい。

+0

あなたの既存のコントローラとテンプレート? –

+1

[サービスメソッドのtwigグローバル変数としての複製](https://stackoverflow.com/questions/28862801/service-method-as-twig-global-variable) –

答えて

2

using global variablesに関する公式ドキュメントを読んでください。私の頭の上オフ

- あなたが注入できる...

  1. ...グローバル小枝の設定
  2. からスカラー値...サービスコンテナパラメータ
  3. からスカラー値。 ..サービス(PHPオブジェクトを読んで)

それとも同じように、小枝拡張を書くことができます。

class DateExtension extends \Twig_Extension 
{ 
    public function getFunctions() 
    { 
     return [ 
      new \Twig_SimpleFunction('get_date', array($this, 'getDate')) 
     ]; 
    } 


    public function getDate($date) 
    { 
     // format it how you want 
     return (new \DateTime($date))->format('Y-m-d H:i:s'); 
    } 
} 

そして単純で任意のテンプレートでそれを使用する:あなたはいくつかのコードを投稿することができます

<div> 
    <h2>{{ get_date('today') }}</h2> 
    <!-- today's inputs .... --> 
</div> 
<div> 
    <h2>{{ get_date('tomorrow') }}</h2> 
    <!-- tomorrow's inputs .... --> 
</div> 
0

どのような「ダイナミックな」の話ですか?このダイナミックがあなたのアプリケーションのデータストレージに保存されている値の変更から行くならば、私は考えているように、コントローラのアクションを定義して、データベースからこのデータを取得し、すべてのページロード時にAJAX経由で呼び出すことができますクライアント側でこれらの値を取得します。または、WebSocketのヘルプを使用することさえできます。しかしこれはまさに前提です。あなたが本当に助けを必要とするなら、あなたの仕事の文脈についてのより多くの情報を私達に提供するべきです。

+0

データストレージから値を取得したくない私はコントローラを介していくつかのデータ変換を行うことができるようにしたい。 – matthiasbe

+0

の編集内容を確認してください。Tobias Xyのコメントリンクに記載されている内容は、あなたの質問に最も関連していると考えています。また、すべてのコントローラーで定義する必要はありません。ベーステンプレートを定義し、ここに他のすべてのテンプレート(定義されたサービス呼び出しとともに)を置いて拡張するだけです。 –

関連する問題