« PHPのフレームワークSymfonyでWebアプリ作成(2)インストール | メイン | OSXでviを使おう »

PHPのフレームワークSymfonyでWebアプリ作成(3)単純なWebアプリ作成

ずいぶん間があいてしまいました。

そのあいだ、世の中いろいろと騒々しい感じだったですが、ひとりこもってSymfonyであれこれ作ってました。
ここで書いておこうと思ったTipsとかもいろいろあるにはあったのですけど。

調べているうちに、基本的な使い方等は他にもblogで書かれている方が結構いる事が分かったのですが、書く事で自分が覚えるという事と、自分用メモのため続けます。

手始めに、ブックマークアプリの作り方から。

まず、ウェブ共有のrootディレクトリにフォルダ作成。

# mkdir bookmark
# cd bookmark

で、プロジェクトのイニシャライズ

# symfony init-project bookmark

で、ドドドドッとファイルとフォルダが生成されます。

# symfony init-app myapp

という感じにアプリケーション部分のファイルとフォルダを用意。
ブラウザで以下のURLにアクセスすると「Congratulations!」の文字が!

http://localhost/~myuser/bookmark/web/

apachのmod_rewriteモジュールを使用するので該当のコメントを外します。
OSX10.4だと、httpd.confはここにあります。

# vi /private/etc/httpd/httpd.conf  

AddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so
↑コメントを外す。

で、各ユーザー向けの.confを修正

# sudo vi /private/etc/httpd/users/myuser.conf 

でファイルを開いて以下の設定を追加。

<VirtualHost *:80>
  DocumentRoot "/Users/myuser/Sites/bookmark/web"
  DirectoryIndex index.php

Alias /sfbookmark /Users/myuser/Sites/bookmark/web/app

<Directory "/Users/myuser/Sites/bookmark/web">
AllowOverride All
</Directory>
</VirtualHost>

apachを再起動すると以下のURLでデフォルト画面にアクセスできるようになります。

http://localhost/

参考:サブディレクトリにインストールするやり方(英語)

次に、使用するデータベースのスキーマを作ります。MySQLを使用。

テンプレートをコピーし、

# cp config/schema.xml.sample config/schema.xml

以下のXMLを張り付け。

<?xml version="1.0" encoding="UTF-8"?>
 <database name="symfony" defaultIdMethod="native">
   <table name="bookmark_items" phpName="Items">
     <column name="id" type="integer" required="true" primaryKey="true" autoincrement="true" />
     <column name="title" type="varchar" size="255" />
	 <column name="url" type="varchar" size="255" />
   </table>
 </database>

で、モデルの作成。

# symfony build-model

sqlファイルを作成。

# symfony build-sql

ディレクトリを移動すると

# cd data/sql
# ls

schema.sql sqldb.map

といった感じでsqlファイルが作成されている。
DBを用意し、

# mysql admin -u youruser -p create bookmark
# mysql -u youruser -p bookmark < data/sql/schema.sql

と言った感じにテーブルを作成。

次にorm.ymlファイルを修正

# vi app/config/orm.yml
all:
  adapter:  mysql
  host:     localhost
  database: bookmark
  username: youruser
  password: yourpass

次にアプリケーションのscaffoldingを作ります。
これは、データベースのやり取り・CRUD(Create Read Update Delete)のテンプレートを自動的に作成してくれる機能です。この機能のおかげでSQL文をやこまかい処理を意識する事無くデータベースとやり取りするページのベースを作成してくれます。

まずはこんな感じに。

# symfony generate-propelcrud app items items

http://localhost/items

にアクセスすると、一覧が取得でき、編集できるページができています!

全体の見栄えをいじるのは

app/templates/layout.php

今作ったアクションの見栄えをいじるのは

app/modules/items/templates/以下

またアクションをいじってモジュールの動作を変える事もできます。

app/modules/items/actions/actions.class.php

注意するべきはそれぞれのファイルに命名規約があり

モジュールのクラス名は

モジュール名Actions

となり、アクションは

actions/actions.class.php

内のメソッド名に

executeアクション名(最初の文字は大文字)

と言った具合に書いていきます。なので、たとえば、itemsというモジュールにlistというアクションを追加するなら

class itemsActions extends sfActions
{
	public function executeList()
	{
		// ここにコードを書いていく
	}
}

の用な形式になります。

また、テンプレートはtemplatesフォルダ以下に

アクション名Success.php

のかたちでファイルを作成していきます。

空のメソッドとHTMLだけのテンプレートを用意すると、何の処理も加えずテンプレートに記述したまま表示します。

と言った具合で、単純ではありますが、初めてのウェブアプリができました!

簡単に試したい人はsandboxも最近公開されてるみたいです。
(いろいろバグがあるみたいですけど。。。)

symfonyは個人的にかなり面白いと思ったので、なにか技を発見したら随時公開していこうかと思います。

トラックバック

このエントリーのトラックバックURL:
http://www.minfish.jp/blog/mt-tb.cgi/88