プロジェクトのセットアップ

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';

この方法では、プロジェクトのディレクトリをマシンの別の場所、もしくはほかのマシンに移動させてもプロジェクトは立派に動作します。