ichikawaです。
引き続きjobeet3日目をやりました。
3日目はaskeetでいうと2日目に似た作業が多かったのですが、やり方が違うところが数カ所ありました。
リーレーションがシンプル?さっそくまず目に入るのがリレーションの画像。

む、askeetの頃と比べてシンプルではないか?
ちなみにこれがaskeetのDBリレーションの画像。

Doctrineのこと
symfony comes bundled with two of them: Propel and Doctrine. In this tutorial, we will use Propel.
なにやら気になるDoctrineのことが書いてありましたが、symfonyではPropelとDoctrineの両方を使える、ということが書いてあって、結局Propelを使うようです。
勉強のためにもできればDoctrineを使ってjobeetを進めて行って欲しかったなあ。残念。
schema.ymlはjobeetに従って作成し、 次はDB整備です。
database.ymlの内容をコマンドで設定!
DBが作られたところで接続設定。
$ php symfony configure:database “mysql:host=localhost;dbname=jobeet” root mYsEcret
これはすごいです。askeetでわざわで設定していたdatabases.ymlを、コマンド一つで簡単に設定できます。
手動で設定するのと手間的にはあまり変わりはないと思いますが、DB設定をするのにコマンドからの操作一つでできるのがgoodですね。
数人で開発をする際に、各自のDB設定をスマートにできそうです。
propel:insert-sqlをすると実行してよいかを聞かれる
symfony1.0ではなかったのですが、propel:insert-sqlのコマンドを入力すると下のような画面がアラートが出て、このまま続けて良いか聞かれます。
どうやらpropel:insert-sqlの際にDBのテーブルを削除するので、その確認みたいです。

propel:insert-sql –no-configuration 引数を与えてやればこの確認を無視して実行できるみたいですが、どうしてこのような要素が追加されたのでしょう。
初期データの登録
jobeetに書かれている通りに fixtureディレクトリ以下にデータを作成。
$ php symfony propel:data-load
データの投入完了。
symfony1.0では
symfony propel-load-data だったのが、
symfony propel:data-load というふうに
data と loadの位置が逆になっているので注意。
しかもsymfony1.0では app の指定が必須ではありませんでしたっけ。
moduleの作成コマンドにも引数が!
$ php symfony propel:generate-module –with-show –non-verbose-templates frontend job JobeetJob
長いですね。引数を付けています。module作成するのにこんなにコマンドが長いとは。
ちなみに引数を付けた場合と
symfony propel:generate-module frontend job JobeetJob
と引数なしでmodule作成した場合とでjob/action/actions.class.phpの中身を比べてみました。
左が引数なし、右が引数ありです。

(画像クリックで拡大)
–with-show と引き数をつけることにより”executeShow”が作られていますね。
しかし引数付けなくてもこんなにaction内が出来上がっているのですね。どうなっているのか、これは勉強が必要だと感じました。
ちなみにこのコマンドについては
symfony help propel:generate-module
で調べることができました。
formが難しい
マジックメソッドを定義して、フォームが見れたわけですが、フォーム関連がsymfony1.0に比べてざっくり変化があったように見えます。
疑問に思うことをすべて挙げると書ききれない気がするので、もう少し勉強してからまとめたいと思います。
バリデーションが実装されている
schema.ymlで定義したことを元に、自動的に必須事項のバリデーションが実装されています。
これも、どういった仕組みになっているのか勉強中です
その他気づいたこと
modelがないとmoduleを作成できない
先ほど
$ php symfony propel:generate-module –with-show –non-verbose-templates frontend job JobeetJob
というコマンドを使って
moduleを作成しましたが、これは先に”JobeetJob”というmodelが作成されていないとmoduleを作ることができません。
propel:build-allの説明がある
askeetでは propel-build-all の説明がなく、このコマンドの存在を知るまで
- symfony propel-build-sql
- symfony propel-build-model
- symfony propel-insert-sql
の3つを1つ1つ実行していました。
fixtureデータの読み込みの順番の説明がしてある
askeetではテストデータはすべて一つのファイルに書かれていました。
jobeetではファイルの先頭に番号を付けることで読み込まれる順番を定義できることが説明されていました。
3日目は以上です。
続いて4日目(The Controller and the View)に挑戦します。
askeetでは4日目は一つの山場でしたが、jobeetは果たして……?
*kiskeさんの日本語訳を元に本家サイトにjobeet1日目日本語版が載りました!おめでとうございます!


コメントをどうぞ