uthorofotus iruc
プログラムを組むために考えたり憶えたりした、いろいろなことを記録していきます。タイトルの読みは「ウソロフォトス イルーク」
[17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7]
[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
askeet day three:dive into the MVC architecture の解説
3日目の日本語チュートリアルはこちらです。本家英語版はこちらです。
■前回までのsymfony(Previously on symfony)
3日目のチュートリアルをやる前に、コントローラーについてsymfonyBookを読むように指示がされています。まだここの部分についての和訳はできていないようです。こちらに、前のsymfonyBook(本として出版される前の版)の和訳があります。概要を掴むために読んでおくといいでしょう。
私なりに要約してみると、まず、ブラウザからのリクエストはすべて1つのphpファイル(フロントエンドコントローラー)が受けます。リクエストされたURLによって、どんな行動(アクション)を実行するのか決まります。そのアクションを実行するところまでがコントローラーの役割です。
■MVCモデル(The MVC model)
3日目は2日目で設定したquestionモジュールの機能を変更しながら、symfonyのMVC構造について理解を深めていきます。本家のMVC解説はこちらに、和訳もできているようです。
MVCはだいたいこのような区分になっています。
- Controller
http://askeet/question/[アクション名] というアクセスがあった際、アクション名を実行させます。基本的にはsymfonyがやってくれますので、特別な場合だけコンフィグファイルによって開発者がコントロールします。 - Model
アクション本体とpropel-buid-modelで生成したクラスがそれにあたります。具体的には質問内容をデータベースより取得したり、新しい質問をデータベースに登録したりといった操作をします。次に、どのViewを使うのかも、Modelにて指示します。 - View
Modelで得たデータを、ブラウザで表示するようにHTMLで出力します。HTML埋め込みのPHPと処理を助けるヘルパー関数によって構成されます。
■レイアウトの変更(Change the layout)
以前のチュートリアルでは、layout.phpに
<?php echo include_stylesheets() ?>
<?php echo include_javascripts() ?>
というコードが入っていました。今のsymfonyはview.ymlの設定をみて自動で入れてくれるようになりましたので、その必要が無くなりました。
layout.phpの変更後、サイトトップページ(http://askeet/)にアクセスしてもレイアウトは変わりません。symfony初期設定(default/index)ページはlayout.phpを読まないようです。確認は http://askeet/frontend_dev.php/question で行いましょう。"symfony cc"でキャッシュをクリアしているなら http://askeet/question でも良いです。
レイアウト確認の際、Firefoxでは問題なく(テキストに置き換わって)新しいデザインで表示されますが、IEでレイアウトの確認をしている場合はaskeetロゴ画像が上手く表示されていないはずです。
このままでもアプリケーションの動作に支障はありませんが、せっかくなのでcssと一緒にロゴ画像も取得しておくと良いでしょう。(下の画像は3日目終了時の見た目です。)
cd web/css/
wget http://svn.askeet.com/tags/release_day_3/web/css/layout.css
wget http://svn.askeet.com/tags/release_day_3/web/css/main.css
cd web/images/
wget http://svn.askeet.com/tags/release_day_3/web/images/askeet_logo.gif
cd ../../
■環境について少し(A few words about environments)
設定を変更したのに上手く反映されない場合、"symfony cc"をしてみるといいでしょう。
■デフォルトのホームページ(トップページ)への再定義(Redefine the default homepage)
特に失敗はしないでしょう。設定を変えた後、"symfony cc"をしておきましょう。
■テストデータの定義(Define test data)
askeet/data/fixtures/ ディレクトリは自分で作ってください。あと、テストデータの中で、Interestデータの書式は他と違って短縮形なので注意しておきましょう。
idはデータベースに入れてみないと分からないため、代わりの名前を指定します。テストデータ内であれば、その名前を使って他のデータを指し示すことができます。
■データを設定する為のバッチ作成(Create a batch to populate the database)
実は以下の作業はsymfonyコマンドとして用意されています。下記のコマンドを使えば、わざわざバッチファイルを書かなくても良くなります。ただ、手順を知っておくためにバッチファイルを書いておくといいでしょう。
symfony propel-load-data frontend
他にも便利なコマンドがあります。ここで確認できます。
▽バッチのスケルトン(Batch skeleton)
バッチの雛形をつくるコマンドがあります。
symfony init-batch default load_data frontend
書式はこうです。ソースを見ていないので多分…になります。
symfony init-batch default [作成バッチファイル名] [アプリケーション] [環境(省略可)] [テストデータファイル(省略可)]
DB接続部分のコードがコメントアウトされていますので、外してください。
▽データのインポート(Data import)
sfPropelDataは、データベースへの接続を提供しているクラスです。ここではテストデータ場所の指定に askeet/data/fixtures/ しか指定して無く、ファイル名の指定がありません。(多分)loadDataの仕様のためにfixturesディレクトリ内の全データを読み込みます。.
▽バッチの実行(Launch the batch)
何回も同じバッチ操作をしてみてください。質問IDが1に戻らずに増えていく(MySQL 5.0.22の場合)でしょう。動作に支障はないですがもし気になるのであれば、"symfony propel-insert-sql"を実行してみださい。他に手段があると思いますが、楽そうだったので私はそうしています。
■モデル内でのデータアクセス(Accessing the data in the model)
アクション内で設定した $this->questions が、ビューでは $questions でアクセスできるようになっているのがわかれば、コードの意味も分かるでしょう。
■question/list テンプレートの変更(Modify the question/list template)
"symfony propel-generate-crud"で生成されたビューコードは、テーブルタグが使われています。コードの可読性やCSSとの相性に問題があるので、divを使ったコードに書き換えています。その他には、ビューで使える機能として、ビューヘルパー関数を使っています。特に、リンクをAタグではなくlink_toという関数を使用していることには理由があります。後日その理由は分かります。
■クリーンアップ(Cleanup)
どうやら、questionモジュールではlistとshowアクションしか使わないようです。create/edit/deleteはどこかで実装するのでしょう。
listのテンプレートにはeditアクションへのリンクがありますが、4日目にすぐ修正をしますのでそのままにしているのでしょう。
■それではまた明日(See you Tomorrow)
4日目はquestionモジュールをさらに改良していきます。
この記事にコメントする
← askeet day four:refactoring の解説 HOME askeet day two:setting up a data model のトラブル →
プロフィール
Wassr
カレンダー
01 | 2025/02 | 03 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
最新記事
アクセス解析