symfonyの簡単なまとめ

インストール

 pear channel-discover pear.symfony-project.com
 pear install symfony/symfony-1.2.10

モジュールの追加

frontendアプリケーションにcontentモジュールを追加。

 cd PROJECT_DIR
 symfony generate:module frontend content

アクションの追加

showアクションを追加。URLは http://localhost/frontend_dev.php/content/show になる。

  • actions/actions.class.php
     <?php
     class contentActions extends sfActions
     {
       public function executeShow()
       {
          $this->mesg = 'SHOW!';
       }
     }
  • content/templates/showSuccess.php
     <html>
     <body>
     <?php if ($mesg): ?>
     [<?php echo $mesg ?>]
     <?php endif; ?>
     </body>
     </html>

ページのレイアウト

sampleモジュールのindexアクションのページを考えると、デフォルトの構成では、以下のように2つのファイルを使い、レイアウトに<html>タグや<head>タグを記述し、テンプレートには<body>内を記述する。

レイアウトファイル
apps/frontend/templates/layout.php
テンプレートファイル
apps/frontend/modules/sample/templates/indexSuccess.php

任意のレイアウトを指定する

  • apps/frontend/templates/my_layout.php
  • /apps/frontend/modules/sample/config/view.yml:
     all:
       has_layout: on
     indexSuccess:
       layout:     my_layout

テンプレートからテンプレートを呼び出す

部分テンプレート

以下のようにテンプレートに記述する。

 <?php include_partial('mypartial1') ?>        # frontend/modules/mymodule/templates/_mypartial1.phpが呼び出される
 <?php include_partial('foobar/mypartial2') ?> # frontend/modules/foobar/templates/_mypartial2.phpが呼び出される

部分テンプレート内で変数を参照するには、呼び出す際に以下のようにすると、mytotal変数に参照出来る。

 <?php include_partial('mypartial', array('mytotal' => $total)) ?>

コンポーネント

TODO

既存のデータベースからスキーマファイルを作成

  • config/databases.yml
     all:
       propel:
         class:          sfPropelDatabase
         param:
           dsn:          mysql://login:passwd@localhost/blog
  • 以下のコマンドを実行する。
     symfony propel:build-schema

スキーマファイルからデータモデルクラスを作成

 symfony propel:build-model

データモデルクラス

  • lib/model/XXX.php
  • ロジックを記述し、実際に編集する。

基底データモデルクラス

  • lib/model/om/XXX.php
  • symfonyシステムファイルで通常編集しない。

オブジェクトクラス

  • lib/model/TableA.php
  • lib/model/om/BaseTableA.php
  • テーブルのレコードそのものを表すクラス。
     $tblA = new TableA();
     $myname = $tblA->getMyName();

ピアクラス

  • lib/model/TableAPeer.php
  • lib/model/om/BaseTableAPeer.php
  • テーブルのレコードを操作(取得)するクラス。
     $tblA_list = TableAPeer::retrieveByPks(array(1,2,3));

CRUD

TODO

URL・ルーティング

 // 内部のURI構文
 <module>/<action>[?param1=value1][&param2=value2][&param3=value3]...
 // 内部URIの例で、エンドユーザーに決して表示されない
 article/permalink?year=2006&subject=finance&title=activity-breakdown
 // 外部URLの例で、エンドユーザーに表示される
 http://www.example.com/articles/finance/2006/activity-breakdown.html
  • routing.yml
     article_by_title:
       url:    articles/:subject/:year/:title.html
       param:  { module: article, action: permalink }
  • url_for()ヘルパーは内部URIを外部URLに変換する
     <a href="<?php echo url_for('article/permalink?subject=finance&year=2006&title=activity-breakdown') ?>">
       ここをクリック</a>
     // ヘルパーはURIがarticle_by_titleルールにマッチすることを見る
     // ルーティングシステムはそれから外部URLを作成する
     => <a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">ここをクリック</a>
  • link_to()ヘルパーは直接ハイパーリンクを出力し、PHPとHTMLを混在させることを回避する
     <?php echo link_to(
       'ここをクリック',
       'article/permalink?subject=finance&year=2006&title=activity-breakdown') ?>
     ) ?>
  • 内部では、link_to()はurl_for()を呼び出すので結果はつぎのものと同じ
     => <a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">ここをクリック</a>

フォームヘルパー

フォームタグ

 <?php echo form_tag('test/save') ?>
   => <form method="post" action="/path/to/save">
 <?php echo form_tag('test/save', 'method=get multipart=true class=simpleForm') ?>
   => <form method="get" enctype="multipart/form-data" class="simpleForm"action="/path/to/save">

閉じタグは</form>自分で。

デバッグ

ログ

 public function executeIndex(sfWebRequest $request)
 {
    $this->logMessage('ログです');
    $this->logMessage('エラーです','err');
 }
 <html><?php use_helper('Debug') ?>
 <?php log_message('エラーです', 'err') ?></html>

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS