実際に開発を進めていくと、symfonyコマンドで作成できる単純な登録・一覧・変更・削除機能以外にも、バリデーションや部分的なレイアウトの変更、また、仕様の変更によるデータベースの変更などが発生すると思います。開発途中に頻繁に使用する機能・手順について、以下で紹介します。
開発過程で最も多く発生する仕様の変更などによる新規テーブルの作成やカラム追加、それに伴うモデルクラスの変更です。symfonyで開発を行う場合、以下の方法で修正を行います。
・既存の方法でデータベースの更新を行った後、symfoynコマンドでスキーマ定義ファイルを再生成する
$ symfony propel-build-schema
・symfonyコマンドでモデルクラスを再生成する
$ symfony propel-build-model
注釈1
モデルクラスは、子クラスである/lib/model/***Table.php と親クラスである/lib/model/om/***Table.php で構成されています。親クラスはモデルクラス再生成の際に初期化されてしまうので、オリジナルのgetterやsetterの追加など、モデルクラスの修正を行う場合は必ず子クラスの方に追加します。
注釈2
データベースが複数存在する場合などスキーマ定義ファイルに特殊な記述を行っている場合は、symfoynコマンドで再生成すると初期化されてしまうため、手動で変更を行った方が効率的です。
※データベース複数化の方法については、プログラマーの開発メモを参照。
symfonyの場合、アクション内にコードを記述せずに、モジュールディレクトリの配下の/varidate/ディレクトリの下にYAML形式の設定ファイルを置くことでバリデート処理が行えます。
※記述例
fillin : ←fillin機能設定
enable : on ←fillin機能を有効にする ※エラー時に入力値が入力フォームに入る
param :
name : lmodForm ←fillin対象フォーム名 ※フォームが1つの場合は省略可
skip_fields : ←fillinを無効にしたいフィールド名を指定
exclude_types : ←fillinを無効にしたい入力タイプを指定
check_types [ text,hidden ] ←fillinを有効にしたい入力タイプを指定
converters :
methos : [ post, get ] ←バリデートを有効にするメソッドを指定
fields :
member_id : ←バリデート対象フィールド名
required : ←バリデート方法
msg : "会員IDは必須です。" ←エラーメッセージ
sfNumberValidator :
nan_error : "会員IDは半角数字で入力してください。"
symfonyでの表示画面は、以下のファイルの組み合わせで生成されます。
・/app/[アプリケーション名]/templates/layout.php
↑出力時のレイアウト
・/app/[アプリケーション名]/configs/view.yml
↑使用するレイアウトの指定やcss、jsファイルの指定
・/app/[アプリケーション名]/modules/[モジュール名]/configs/view.yml
↑上記view.ymlをモジュール単位で変更したい場合に使用
・/app/[アプリケーション名]/modules/[モジュール名]/templates/***.php
↑出力テンプレート(layout.phpの sf_content部分に出力)
(使用例)特定のモジュールだけレイアウトを変更したい場合
/templates/layout.phpをコピーし、layout_member.phpなど別名で保存します。
モジュールディレクトリの configsディレクトリ配下にview.ymlを作成し、以下のように記述して保存します。
※記述例(ファイル作成後はキャッシュクリアが必要)
memberLogin: ←設定を有効にしたアクション名
stylesheets: [common, member] ←使用するCSSファイル名 ※使用しない場合は [-*]と記述
javascripts: [member_login] ←使用するCSSファイル名 ※使用しない場合は [-*]と記述
has_layout: on ←レイアウトを使用するかどうか ※使用しない場合は offと記述
layout: layout_member ←使用するレイアウトファイル名
以下のファイルでsymfonyのキャッシュ機能の設定ができます。(デフォルトは無効)
/apps/[アプリケーション名]/config/settings.yml
有効にすると更新の度にコマンドラインでキャッシュをクリアする必要あります。不便なのでとりあえず開発段階では無効にしておいた方が賢明です。
アプリケーション全体で使用する定数を定義したい場合、/config/app.ymlファイルで定義します。
※記述例
all:
//ノーマル定数
val1 : 255
val2 : 65535
//グループ定数
doraemon :
cha1 : ドラえもん
cha2 : のび太
cha3 : ジャイアソ
cha4 : スネオ
//連想配列
items :
doa : どこでもドア
take : タケコブター
アクション内で定数値を取得する場合は以下のような記述になります。
sfConfig::get(app_val1);
sfConfig::get(app_doraemon_cha1);
また、モジュールディレクトリ配下の configディレクトリにmod.ymlを設置することにより、モジュール単位で有効な定数を定義することも可能です。モジュール単位で有効な定数値を取得する場合は以下のような記述になります。
sfConfig::get(mod_val1);
URLのアクション名が省略された場合や、/ でアクセスされた場合のコントローラの動作を/config/routing.ymlファイルで定義します。
※記述例
# default rules
homepage:
url: /
param: { module: top, action: index } ←URLが / で指定された場合、topモジュールのindexアクションを呼び出す。
default_symfony:
url: /symfony/:action/* ←URLが/symfony/indexで指定された場合、indexアクションを呼び出す。
param: { module: default }
default_index:
url: /:module
param: { action: index } ←URLでアクションが指定されていない場合場合、indexアクションを呼び出す。
default:
url: /:module/:action/* ←URLのルールを指定 ※/モジュール名/アクション名/とする