SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

symfony入門

symfony入門(1):symfonyで始めるPHPフレームワーク

symfonyによる実践的なPHPアプリケーション開発


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード sample.zip (794.0 B)

symfonyを使ってみよう(2/3)

プロジェクト生成から簡単なアプリケーション作成まで

 それでは実際に、簡単なアプリケーションを作成してみることにしましょう。

[1]プロジェクトの生成

 これから目指すアプリケーションに必要なファイル群をこのプロジェクトの中で作成していきますが、その前にプロジェクトファイル群を一まとまりにしておくフォルダを作る必要があります。今回はプロジェクト名を「codezine」としましょう。まず、プロジェクトを作成したい場所で(ここでは「C:\Program Files\Apache Software Foundation\Apache2.2\htdocs」とします)「codezine」というフォルダを作成します。

 そしてそのフォルダ(C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\codezine)にカレントフォルダを移動し、symfonyコマンドでプロジェクトを作成します。

プロジェクトの作成
cd codezine
symfony init-project codezine

 これで、プロジェクトを始めるにあたってファイルを配置するフォルダ群が生成されました。以下は、init-projectコマンドによって生成されたプロジェクトのスケルトンです。

プロジェクトのスケルトン
codezine/(プロジェクトフォルダ)
  apps/   アプリケーションフォルダ
  batch/  コマンドラインやスケジューラーから呼び出されるバッチファイル群
  cache/  表示を高速化するためのキャッシュフォルダ
  config/ プロジェクトの設定ファイル群
  data/   データ用フォルダ
  doc/    ドキュメント用フォルダ
  lib/    外部クラス・ライブラリ用フォルダ
  log/    symfonyによるログファイル群
  test/   単体テスト用フォルダ
  web/    Webサーバー用ルートフォルダ

[2]プロジェクト内でのアプリケーションの生成

 次に、このプロジェクトの中で作成するアプリケーションを宣言します。

 symfonyにおいては、一つのプロジェクト内に複数のアプリケーションを作成することができます。実際は個々の用途に応じて「frontend」や「backend」などを名前にすることが多いと思いますが、ここではとりあえず、アプリケーション名を「mycodezine」としましょう。

アプリケーションの宣言
symfony init-app mycodezine

 これでアプリケーション作成のためのフォルダ構造がプロジェクトのアプリケーションフォルダ「apps」の配下にに生成されました。以下が自動生成されたフォルダの構成です。

フォルダ構成
codezine/       (プロジェクトフォルダ)
  apps/
    mycodezine/
    config/      YAMLによる設定ファイル群
      i18n/      国際化用ファイル群
      lib/       アプリケーション特有のクラス/ライブラリ用フォルダ
      modules/   モジュール用フォルダ
      templates/ アプリケーション、モジュール用テンプレートフォルダ
YAMLファイルについて
 symfonyでは各種設定ファイルにYAMLを用いています。これは人間にとって見やすいことを目指して作られたデータ構造記述フォーマットで、XMLのようなタグや特殊な構文を使わずにインデントの階層によってデータ構造を記述します。実際の記述の様子は本文中にも出てきますが、詳しくはYAML Ain't Markup Languageを確認ください。

 これまでのコマンドで、「codezine/web/」内に「index.php」ができているはずです。

 本来は「<アプリケーション名>.php」が作成されるのですが、最初に作成したアプリケーションだけはそのプロジェクトの代表ページ(フロントコントローラ)になるということで、「index.php」が作成されます。

 プロジェクト内の「index.php」は、MVCの「C」を司るフロントコントローラとしての役割を担っています。フロントコントローラはすべてのWebリクエストを受け付け、求められるテンプレートやモジュール・アクションを呼び出しています。また後述する「スマートURL」もフロントコントローラの役割です。symfonyによって自動生成されるこのファイルを変更することは通常ありません。

 今度はこの「index.php」に直にアクセスできるように、Apacheの「httpd.conf」ファイルの最後に以下の記述を追記します(もちろん「conf\extra\httpd-vhosts.conf」を参照する設定でそこに追記しても構いません)。

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot "C:\Program Files\Apache Software Foundation\Apache2.2\
htdocs\codezine\web"
  DirectoryIndex index.php
  Alias /sf "C:\php\PEAR\data\symfony\web\sf"

  <Directory "C:\Program Files\Apache Software Foundation\Apache2.2
\htdocs\codezine\web">
   AllowOverride All
  </Directory>

  <Directory "C:\php\PEAR\data\symfony\web\sf">
   allow from all
  </Directory>

</VirtualHost>

 Apacheのバーチャルホスト機能を使用し、今回作成するプロジェクトサイトのルートディレクトリを「C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\codezine\web」に指定しています。また、symfonyアプリケーションが、デバッグ時(後述)に用いるツールバーの画像ファイルにアクセスできるように、「C:\php\PEAR\data\symfony\web\sf」フォルダにエイリアスを設定しています。さらに、symfonyアプリケーションで「mod_rewrite」モジュールによるスマートURL機能を利用できるように、「codezine/web/.htaccess」ファイルを使用可能にしています。

 それでは、

http://localhost/

 にアクセスしてみてください。

おめでとうの画面
おめでとうの画面

 「coguratulations!」メッセージが表示されていれば、OKです。ここから、実際にアプリケーションに必要なコードを作っていきます。

 もし上記の画面が見られなかった場合、「php.ini」内の
magic_quotes_gpc = Off
 を確認してください。
開発環境
 アプリケーション作成時、開発環境用のファイルも同時に生成されています。今回の場合では「mycodezine_dev.php」がそれです。このページには右上にいくつかのボタンがついていて、デバッグとログの機能が備わっています(図参照)。
開発環境用画面1
開発環境用画面1
 デバッグ機能では各設定変更がキャッシュクリアをしなくても反映され(通常はキャッシュクリアが必要)、またその時の設定よるリクエストや応答の状態も確認できるようになっています(下図)。
開発環境用画面2
開発環境用画面2
 さらに、ログ機能ではすべてのイベントが記録され、エラー追跡に必要な情報が得られるよう配慮されています(下図)。
開発環境用画面3
開発環境用画面3

[3]アプリケーション内で動作するモジュールの生成

 こちらもsymfonyコマンドで行います。モジュール名は「helloworld」とします。

モジュールの生成
symfony init-module mycodezine helloworld

 これで、「mycodezine」フォルダ内の「module」フォルダに、helloworldモジュール一連のファイルが配置されます。

フォルダ構成
codezine/           (プロジェクトフォルダ)
  apps/
    mycodezine/     (アプリケーションフォルダ)
      modules/
        helloworld/ (作成されたモジュールフォルダ)
          actions/    アクション用フォルダ
          config/     モジュール用設定ファイル
          lib/        モジュール用クラス・ライブラリ
          templates/  モジュール用テンプレート
           validate/  検証設定ファイル用フォルダ

 モジュールフォルダ内にもアプリケーションフォルダ内と同様のフォルダが存在していますが、ここにはモジュールごとの特有の要素が入ります。それ以外は上位(アプリケーション、プロジェクト)の要素が継承されます。このモジュールには、以下のURLでアクセスすることができます。

http://localhost/helloworld
モジュール作成直後の画面
モジュール作成直後の画面

 URL末尾がモジュール名になっています。これは後述するスマートURL機能によるものです。ちなみにこの画面の正体は先ほど作成された「helloworld」フォルダ内の「templates/indexSuccess.php」です。これは、MVCの「V」にあたる部分を担っています。このファイルを編集することでデザインの変更が可能です。このファイル名は、実は「<アクション名><実行結果>.php」という命名規則に因んでいます。この場合、「actions.class.php」内に定義されているデフォルトのアクション「index」が無事終了した場合に実行されるビューファイルであることがファイル名から分かります。symfonyはこの命名規則によって必要なビューファイルを判断し呼び出します。

次のページ
symfonyを使ってみよう(3/3)

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
symfony入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 川北 季(カワキタ ミノル)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/704 2007/01/09 18:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング