ずいぶん間があいてしまいました。
そのあいだ、世の中いろいろと騒々しい感じだったですが、ひとりこもって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は個人的にかなり面白いと思ったので、なにか技を発見したら随時公開していこうかと思います。