プロジェクトのセットアップ
symfonyでは、同じデータモデルを共有するアプリケーション(application)はプロジェクト(project)に再分類されます。多くのプロジェクトでは、2つの異なるアプリケーション: フロントエンド(frontend)とバックエンド(backend)が用意されます。
プロジェクトの作成
sfproject/
ディレクトリから、symfonyプロジェクトを実際に作成するためにgenerate:project
タスクを実行します:
$ php lib/vendor/symfony/data/bin/symfony generate:project PROJECT_NAME
Windowsでは次のようになります:
c:\> php lib\vendor\symfony\data\bin\symfony generate:project PROJECT_NAME
generate:project
タスクはsymfonyプロジェクトに必要なデフォルトのディレクトリ構造を生成します:
| ディレクトリ | 説明
| ----------- | ---------------------------------------------------
| apps/
| すべてのプロジェクトのアプリケーションをホストする
| cache/
| フレームワークによってキャッシュされるファイル
| config/
| プロジェクトの設定ファイル
| data/
| -
| lib/
| プロジェクトのライブラリとクラス
| log/
| フレームワークのログファイル
| plugins/
| インストールされたプラグイン
| test/
| ユニットテストと機能テストのファイル
| web/
| Web公開のルートディレクトリ(下記を参照)
NOTE なぜsymfonyはこんなに多くのファイルを生成するのか? フルスタックフレームワークを使う主な利点の1つは開発プロセスを標準化することです。 symfonyのファイルとディレクトリのデフォルト構造のおかげで、symfonyの知識がある開発者であればsymfonyプロジェクトのメンテナンスを引き継ぐことができます。 数分のうちに、開発者はコードに飛び込み、バグを修正し、新しい機能を追加できるようになります。
タスクを実行するときに書かなければならない文字数を短くするためにgenerate:project
タスクはプロジェクトのルートディレクトリでsymfony
ショートカットも作りました。
ですので今後は、symfonyプログラムへのフルパスを使う代わりに、symfony
ショートカットを使うことができます。
データベースを設定する
symfonyフレームワークはPDOでサポートされるすべてのデータベース(MySQL、PostgreSQL、SQLite、Oracle、MSSQL、・・・)をそのまま使えます。 PDOの上に、symfonyは2つのORMツール: PropelとDoctrineを搭載しています。
新しいプロジェクトを始めるとき、デフォルトではDoctrineが有効です。
Doctrineによって使われるデータベースを設定するのは簡単でconfigure:database
タスクを使います:
$ php symfony configure:database "mysql:host=localhost;dbname=dbname" root mYsEcret
configure:database
タスクはデータベースにアクセスするための3つの引数: ~PDO DSN~、ユーザー名とパスワードをとります。
開発サーバーのデータベースにアクセスする必要がない場合、3番目の引数を省略するだけです。
TIP Doctrineの代わりにPropelを使いたい場合、
generate:project
タスクで新しいプロジェクトを作るとき、--orm=Propel
を加えます。 ORMを使いたくない場合、--orm=none
を渡すだけです。
アプリケーションの作成
generate:app
タスクを実行してfrontendアプリケーションを作ります:
$ php symfony generate:app
TIP symfonyショートカットは実行可能なファイルなので、Unixユーザーはsymfonyを'
./symfony
'に置き換えることができます。Windowsでは'
symfony.bat
'ファイルをプロジェクトにコピーして'php symfony
'の代わりに'symfony
'を使うことができます:c:\> copy lib\vendor\symfony\data\bin\symfony.bat .
引数として渡されるアプリケーションの名前をもとに、generate:app
タスクはアプリケーションに必要なデフォルトのディレクトリ構造をapps/frontend/
ディレクトリで作ります:
| ディレクトリ | 説明
| ------------ | -------------------------------------
| config/
| アプリケーションの設定ファイル
| lib/
| アプリケーションのライブラリとクラス
| modules/
| アプリケーションのコード(MVC)
| templates/
| グローバルテンプレートファイル
SIDEBAR セキュリティ
generate:app
タスクを呼び出すとき、セキュリティに関連する2つのオプションを渡すこともできます:
--escaping-strategy
: XSS攻撃を阻止する出力エスケーピングを有効にする--csrf-secret
: CSRF攻撃を阻止するセッショントークンを有効にするタスクにこれらの2つのオプションを渡すことで、Webでもっとよく知られる2つの脆弱性から将来の開発をセキュアにしました。 これで作業は終わりです。 symfonyはあなたに代わって自動的にセキュリティ対策を行います。
XSS(クロスサイトスクリプティング)もしくはCSRF(クロスサイトリクエストフォージェリ)を知らなければ、これらのセキュリティの脆弱性を学ぶために時間をかけてください。
ディレクトリ構造
新しく作成したプロジェクトにアクセスしてみる前に、Webサーバーが書き込みできるようにcache/
とlog/
ディレクトリに書き込みできるようにこれらのディレクトリの書き込みパーミッションを適切なレベルに設定する必要があります:
$ chmod 777 cache/ log/
SIDEBAR バージョン管理ツールを使う方々のための豆知識
symfonyはsymfonyプロジェクトの2つのディレクトリ、
cache/
とlog/
にのみ書き込みます。 バージョン管理ツールはこれらのディレクトリの内容を無視します(たとえばSubversionの場合svn:ignore
プロパティを編集します)。
symfonyのパス
次のコマンドを入力すればプロジェクトで使われるsymfonyのバージョンを表示できます:
$ php symfony -V
-V
オプションはsymfonyのインストールディレクトリへのパスも表示します。
このパスはconfig/ProjectConfiguration.class.php
に保存されています:
[php]
// config/ProjectConfiguration.class.php
require_once '/Users/fabien/symfony-1.4/lib/autoload/sfCoreAutoload.class.php';
よりよいポータビリティのために、symfonyのインストールの絶対パスを相対パスに変更します:
[php]
// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
この方法では、プロジェクトのディレクトリをマシンの別の場所、もしくはほかのマシンに移動させてもプロジェクトは立派に動作します。