Home > Tags > symfony1.1

symfony1.1

symfony1.1以降で開発する際に必ず守ること箇条書き

  • schema.yml
    • カラム名には id、created_at、updated_at、created_by、updated_by を利用する
    • join して利用するテーブルには外部制約を必ず設定、テーブル名_id を利用する
    • database.yml、propel.ini の設定は symfony configure:database コマンドを使う
  • 命名規則
    • 変数、関数名は camelCase で
    • app.yml の変数名は snake_case で
    • コメントなしでもわかるような名前をつけて、わかりきったコメントは書かない
  • コーディングルール
    • type hinting を使う
    • if、for、foreach、switch 文の括弧は symfony 形式で
    • 比較文に ==、!= は絶対に使わない。===、!== を利用する。でも is_null とかはもっと使え
    • 文字列を連結する時はピリオドと文字列の間に半角スペース。(例)
      $text = 'text1' . 'text2' . 'text3'

    • php の定数は小文字で。(例)null、true、false など
    • コード内のコメントなどに全角スペースを使わない
    • 関数の return 値に空文字を使うなら null を使え
  • 全体
    • SQL 文を直接書かない、頑張って criteria で書く
    • 共通処理は親クラスを作成し、継承して利用する
    • クラスのプロパティは絶対に protected or private で
    • symfony の lib ディレクトリ以下を理解するとかなりレベルアップ
  • サーバ
    • utf-8 で統一
  • アクション
    • アクションにビジネスロジックを書かない
    • アクションに criteria を書かない
  • モデル
    • lib/model/om、map、lib/form/base の下はさわらない
    • DB まわりのビジネスロジックは lib/model/xxxPeer.php に書く
    • レコード単位の処理は lib/model/xxx.php に書く
    • doSelectRS() で取得したレコードセットは populateObjects() を使ってオブジェクトに変換すると楽
    • doSelectRs() で取得したレコードセットが 2 箇所以上から利用される場合は、レコードセットに合わせたモデルを作成し利用する
    • DB の定数は xxxPeer.php に宣言
    • 複数のモデルに共通の処理を挿入する場合は、sfPropelBehavior を利用する
  • フォーム
    • Form クラスを必ず使う
    • Form まわりのビジネスロジックは lib/form/xxx に書く
    • 親子関係のテーブルを Form で利用する時は embedForm を使う
    • input タグの name は xxx[xxx] の形式で書く。bind する時のロジックが短くなる。$this->widgetSchema->setNameFormat('xxx[%s]') を使う
    • sfUser を使いたい時は、sfContext::getInstance()->getUser() を利用する
  • バリデーター
    • 複数フィールドのバリデートには setPreValidator()、setPostValidator() を使う
  • テンプレート
    • テンプレートには if、for などの簡単な条件分岐以外で php を利用しない
    • layout 内で動的に切り替わる要素を使いたい場合は slot を利用する
    • form を利用している時はテンプレートに関するロジックは form で、form を利用しない時は、viewXxx.class.php を作成しコンストラクタでオブジェクトを渡してロジックは view クラス内に閉じ込める
  • routing.yml
    • get パラメーターのチェックは routing.yml で
  • エラー
    • 400、500、unavailable.php の 3 つが設定対象
  • 保留
    • (ある程度規模が大きくなると、lib/service/serviceXxx.class.php みたいな symfony  にできるだけ依存しないビジネスロジッククラスを作る案もありかも)
  • ヘッダーコメント
/**
* 概要
*
* @package    xxx
* @subpackage xxx
* @author     mei sei
* @copyright  (c) 2009 company_name inc.
* @version    SVN: $Id$
*/

↓↓↓は本屋で売ってる唯一の symfony 本。始めは買わなかったけど、結局買った本。ないよりは全然まし。

symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
前田 雅央

ソフトバンククリエイティブ

売り上げランキング: 208898

おすすめ度の平均: 2.0

2 Symfony1.2には未対応

4 2冊目に買うべき本

1 この本は酷い

1 誤植が・・・

symfony1.1でフロントと管理ツールの公開ディレクトリを切り替える方法

symfony の web ディレクトリはフロントとバックヤードで共通になってしまう。気持ち悪いので、切り替える方法を考えてみた。

まず以下のように backend ディレクトリを作成する。中身は web ディレクトリをそのままコピーする。


apps/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/
backend/  ← バックヤード用の公開ディレクトリを作成

次に、以下のように config/ProjectConfiguration.class.php の setup メソッドで公開ディレクトリを変更する。

# config/ProjectConfiguration.class.php
    [php]
    class ProjectConfiguration extends sfProjectConfiguration
    {
       public function setup()
       {
         $this->setWebDir($this->getRootDir().'/backend');
       }
    }

あとはドキュメントルートを backend に設定すれば、フロントとバックで別ディレクトリを利用できるはず。でも結局ドキュメントルートを切り替える必要がある。。

symfony×PHP [LLフレームワークBooks] (LLフレームワークBOOKS # 3)
森川 穣 亀本 大地 田中 正裕
技術評論社
売り上げランキング: 62157
おすすめ度の平均: 3.0

1 情報弱者向けの本
5 エッセンスがよくまとまっている

symfony1.1+oracle用のパッチファイル

symfony1.1 + oracle で propel:build-all を実行すると、propel:insert-sql でエラーが発生する。原因は、生成された SQL 内(data/sql/lib.model.schema.sql)のコメントがオラクルのコメントになっていないことと、テーブル名とカラム名がダブルコーテーションで囲まれていることです。

毎回 sql を修正しているわけにもいかないのでパッチを作って対応しました。
これで propel:build-all-load frontend みたいなコマンドもするっと実行できます。

symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
前田 雅央
ソフトバンククリエイティブ
売り上げランキング: 166284
おすすめ度の平均: 2.0

4 2冊目に買うべき本
1 この本は酷い
1 誤植が・・・

ホーム > タグ > symfony1.1

ぴくちゃー
ブログパーツ

ページの上部に戻る