部品化について

symfonyにはテンプレートやロジックを部品化する機能が提供されている。
主に、パーシャル、スロット、コンポーネントという機能を使用する。

1:パーシャル
  一番簡単な部品化の方法で、主にロジックを含まないテンプレートを部品化する際に使用する。

     <?php include_partial("モジュールディレクトリ名/ テンプレート名", "渡す値");?>の形で記述する。
  あらかじめ、モジュールディレクトリ名/templates/_テンプレート名.phpで
  テンプレートを作成しておく。

  [記述例]
  <?php include_partial("default/header")?>

  アプリケーション配下にパーシャルの内容を反映させたい場合もある。このような時は、
  (アプリケーション名)/templates配下に_テンプレート名.phpで作成しておく。
  この内容を呼び出すときは、モジュールディレクトリ名をglobalとする。

  [記述例]
  <?php include_partial("global/header")?>

    パラメータを受け渡すことができる。このときは、以下のように記述する。

  [記述例]
      <?php include_partial("global/header",array("name" => "aaa"))?>

      上記の場合は、_テンプレート名.php内に$nameを定義しておくと、
  その部分にaaaが表示される。

  パーシャルはbodyタグ内のみに使用できる。

2:スロット
  パーシャルはテンプレートの一部を部品化する機能だったが、
  スロットは、テンプレートから、レイアウトの内容を変化させるための機能である。

  ・テンプレート側(indexSuccess.phpなど)
        <?php slot("(スロット名)");?>
        内容
     <?php end_slot();?>

     ・layout.php((プロジェクト名)/(アプリケーション名)/templates配下)
          <?php include_slot("(スロット名)")?>

  上記の内容で指定する。layout.phpに限らず、他のテンプレートでも
  (_header.phpなど)でも可能。

  [記述例]
   ・テンプレート側(indexSuccess.php)
     <?php slot("title")?>
     <title>タイトル</title>
     <?php end_slot();?>
   ・layout.php
             <?php //include_slot("title")?>

     スロットがあるかどうかを判定するためには、has_slot("(スロット名)")を指定する。
  これを使用すると、上記の例の場合、view.yml内のタイトルと、スロットで指定したタイトルを
  切り替えて表示することが可能。この場合、layout.phpの内容を以下のようにする。

  <?php if(has_slot("title")):?>
      <?php include_slot("title")?>
  <?php else:?>
      <?php include_title() ?>
  <?php endif;?>

3:コンポーネント
  パーシャルにロジックが加わったものがコンポーネント。
  部品化したいが、その部品を作成するためにはデータベースから
  データを取得する必要がある場合に使用される。

   <?php include_component("モジュール名", "アクション名");?>の形で記述する。
   コンポーネント専用のモジュール名を作成することが多い。

  [記述例]
   <?php include_component("shared", "hoge");?>

   上記の記述例の場合、
   (プロジェクト名)/app/(アプリケーション名)/modules/shared/templates/
        内に_hoge.phpを作成する。
   
   同時に(プロジェクト名)/app/(アプリケーション名)
   /modules/(アクション名)/actions/components.class.php配下に関数を作成する。
   components.class.phpの名称は固定となる。

        クラス名は、(アクション名)Componentsとする。sfComponentsを継承する。

   関数名はexecute(include_componentの第二パラメータ)とする。

   [記述例]
      public function executeHoge()
      {
          $this -> comment = CommentPeer::getNewComment();
    }

  上記の記述例は、(プロジェクト名)/lib/model/CommentPeer.php内の
  getNewComment関数を呼び出す。

  データベースに関する記述については、
  (プロジェクト名)/lib/model/(テーブル名)Peer.php内に関数の形で記述する。
  上記の記述例でいうと、これをexecuteHogeから呼び出す形になる。
  _hoge.phpとexecuteHoge()はinclude_component("shared", "hoge");で同時に
  呼び出されると理解してもよい。



スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

e.swan

Author:e.swan
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR