ダウンロード sample.zip (794.0 B)
symfonyを使ってみよう(3/3)
[4]indexSuccess.phpの編集
では、このphpファイルの編集を行いましょう。もとのファイルは空ですが、ここに次のように付け加えます。
<p>お名前をどうぞ。</p> <?php echo form_tag('helloworld/youkoso') ?> <?php echo input_tag('anatano_onamae', 'your name') ?> <?php echo submit_tag('Save') ?> </form>
付け加えた部分の<?php ~ ?>の部分はヘルパーとよばれるPHP関数で、HTMLで同じ物を書くよりも短く、またsymfony側のURL管理を容易にしています。ヘルパーは多数用意されていますが今回用いたのはその中でもフォームヘルパーとよばれるもので、入力フォームを実現しています。
| ヘルパー | 種別 | 同等のHTML |
| form_tag( 'helloworld/youkoso') | フォームタグ | <form method="post" action= "http://localhost/index.php/helloworld/youkoso"> |
| input_tag( 'anatano_onamae', 'your name') | テキストフィールド | <input type="text" name="anatano_oname" id="anatano_oname" value="your name" /> |
| submit_tag('Save') | サブミットボタン | <input type="submit" name="submit" value="Save" /> |
個々のテンプレートは<body>タグの中を指定するもので、<head>タグのような共通部分についてはグローバルテンプレートが役割を担っています。アプリケーションフォルダ内の「templates/layout.php」というファイルがそれです。タイトルやキーワードなどの具体的な内容については、ここからさらにアプリケーションフォルダあるいはモジュールフォルダ内の「config/view.yml」が参照されます。アプリケーションやモジュールごとに細かく設定が可能です。以下にアプリケーションフォルダ内の「templates/layout.php」と「config/view.yml」を合わせて示します。前者に対して後者の設定がどう反映されるのか、確認ください。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <?php echo include_http_metas() ?>(view.ymlのhttp_metas:の部分) <?php echo include_metas() ?> (view.ymlのmetas:の部分) <?php echo include_title() ?> (タイトル(アクションやview.ymlで設定可)) <link rel="shortcut icon" href="/favicon.ico" /> </head> <body> <?php echo $sf_data->getRaw('sf_content') ?> (ここに個々のテンプレートが反映される) </body> </html>
default:
http_metas: (http-metas設定部分。「http-equiv:content」という書式)
content-type: text/html; charset=utf-8
metas: (metaタグの各部分。「name:content」という書式)
title: symfony project
robots: index, follow
description: symfony project
keywords: symfony, project
language: en
stylesheets: [main] (スタイルシート読み込み。この場合
「<プロジェクトフォルダ>/web/css/main.css」が
呼び出される)
javascripts: [ ] (Javascriptファイル読み込み)
has_layout: on (レイアウトファイルを使用)
layout: layout (レイアウトファイル名(拡張子省略))
今回はここは特に変更しませんが、YAMLフォーマットは直感的に内容の把握しやすいものとなっています。YAMLフォーマットに関する詳細は、本連載後半で解説する予定です。
[5]actions.class.phpの編集
今度は同じく「helloworld」フォルダ内の「actions/actions.class.php」を編集しましょう。このファイルにはhelloworldモジュールが実行するアクションが記述されています。これも次のように追記します。
<?php /** * helloworld actions. * * @package codezine * @subpackage helloworld * @author Your name here * @version SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $ */ class helloworldActions extends sfActions { /** * Executes index action * */ public function executeIndex() { /* $this->forward('default', 'module');*/ } public function executeYoukoso() { print(htmlspecialchars($this->getRequestParameter('anatano_onamae'))."さん、こんにちは!"); return sfView::NONE; } }
既にexecuteIndex()という関数が定義されていますが、これも「execute<アクション名(最初大文字)>」という命名規則に沿っています。つまり、executeIndex()は「index」というデフォルトのアクションです。executeIndex()内は最初$this->forward('default', 'module');とのみ記されています。これは「default」アプリケーションの「module」モジュールにフォワードするという意味で、先ほどのsymfonyのデフォルト画面が表示されるようになっています。もはやデフォルト画面を表示させる必要はありませんし、先ほど編集した「indexSuccess.php」を表示させたいので、フォワード処理はカットします(上記ではコメントアウトしています)。今回追記した executeYoukoso()は「indexSuccess.php」に追記したフォームタグから呼び出される「youkoso」 というアクションを示しています。そして「youkoso」アクション中ではgetRequestParameter()によってフォームからの値を受け取り表示しています。また、最後のreturn sfView::NONE;ですが、これはアクションのリターンをどうするか決めています。戻り値には以下の表にあげたものがあります。
| 戻り値 | 概要 |
| sfView::SUCCESS; | デフォルトビュー (~Success.php) |
| 'MyResult' ; | デフォルトでないビュー (~MyResult.php) |
| sfView::ERROR; | エラービュー (~Error.php) |
| sfView::NONE; | ビューは返さない |
| sfView::HEADER_ONLY; | ビューは返さずヘッダーだけ返す (X-JSONヘッダ利用時などに使用) |
| sfView::VAR; | ビューは返さないが変数を返す(単体テスト時などに使用) |
今回は簡単にするため、youkosoアクションでは特にビューは返さず、値の表示としています。では再び、先ほどのURLにアクセスしてみてください。
http://localhost/helloworld
「indexSuccess.php」で記述した内容が反映されています。ここでテキストボックスに「codezine」と入れてみましょう。
URLが「http://localhost/helloworld/youkoso」となっています。お気づきでしょうか。
これは、「http://localhost/<モジュール名>/<アクション名>」という形式になるからです。実際にこういう階層でファイルが存在するわけではありません。この形式でモジュールとアクションを呼び出す仕組みを担当しているのがMVCの「C」、コントローラの部分です。 symfonyでのフロントコントローラが「index.php」であるのは、先に触れた通りです。実際にこの機能は「スマートURL」あるいは「URIマッピング」と呼ばれています。こういった規則はプロジェクトフォルダやアプリケーションフォルダ内に存在する「config/routing.yml」で定義しています。
# default rules
homepage:
(「/」のみのURL指定にはdefaultモジュールの
indexアクションが呼び出される)
url: /
param: { module: default, action: index }
default_symfony:
(「/symfony/<アクション名>/*」の場合、
defaultモジュールが呼び出される)
url: /symfony/:action/*
param: { module: default }
default_index: (「/<モジュール名>」の場合、アクションはindexとなる)
url: /:module
param: { action: index }
default: (基本的にURLは
「/<モジュール名>/<アクション名>/*」と解釈する)
url: /:module/:action/*
ルーティングの各項目ごとに、リクエストURLの形式と送られるパラメータが設定できます。デフォルトの状態ではデフォルトのルールだけが記述されていて、「default」の項目で、上記の「/<モジュール名>/<アクション名>/」というマッピングが設定されています。
最後に、今回編集したファイルの役割と、主なsymfonyコマンドについて示しておきます。

| コマンド | 機能 |
| symfony -V | symfonyのバージョンを表示する |
| symfony init-project <project name> | プロジェクトを生成する |
| symfony init-app <application name> | アプリケーションを生成する |
| symfony init-module <application name> <module name> | モジュールを生成する |
| symfony propel-build-schema | 既存のデータベースから定義ファイルであるschema.ymlを生成する |
| symfony propel-build-model | schema.ymlをもとにモデルクラスファイル群を生成する |
| symfony propel-generate-crud <application name> <module name> <model class name> | テーブルに対する基本操作(CRUD)のためのモジュールとテンプレートを生成する |
| symfony cc | キャッシュクリアを行う(設定ファイルを変更した後など) |
今回のまとめ
今回はPHPの基本を一通り学習されたばかりの方を対象に、フレームワークとはどういった雰囲気のものであるかをざっと触れ、PHPフレームワークであるsymfonyを紹介、そのインストールから簡単なアプリケーションを作成するところまでを見てみました。
非常に簡単なアプリケーションでしたが、symfonyコマンドでアプリケーションファイル群が自動生成されていく雰囲気はなんとなく分かってもらえたのではないでしょうか。次回からはsymfonyを使って、実際に掲示板アプリケーションを一から作ってみることとしましょう。
参考資料
- symfony(英語)
- My first project(英語)
- askeet(英語、一部日本語)
- symfony book
- 修正履歴
-
- 2006/12/29 15:07 symfony 1.0.0-beta対応に合わせ一部修正を行いました。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 川北 季(カワキタ ミノル)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
