Symfonyに挑戦12「Jobeet 6日目」
トップページ表示用のプログラムを修正
トップページに表示するJobリストを「作成日が過去30日以内のものだけ」表示するように。
- jobeet/apps/frontend/modules/job/actions/actions.class.phpを変更
【覚書】
- Criteria()という機能を使ってデータベースにアクセス。
- $criteria->add(〜)でデータベースから取得する情報を絞り込む。
MySQLクエリのログファイル
データベースにアクセスしたSQL文のログを確認できる所。
- jobeet/log/frontend_dev.logファイル
- http://jobeet.local/frontend_dev.php/でアクセスしたときに上に表示されるツールバー内の右端(ドラム缶のようなアイコン)をクリックすると表示される。
Jobに有効期限を付ける。
Jobの作成日から30日後の日付を、Jobが作成されたときに自動で保存するようにする。
- jobeet/lib/model/JobeetJob.phpを変更
【覚書】
- データをデータベースに保存するときに、なにか自動で処理したいときはモデルクラスのsaveクラスを拡張するといい。
- isNew()メソッドはータベースにオブジェクトがまだシリアライズされていないときtrueを返し、それ以外は false を返す。
トップページに表示するJobリストを有効期限が生きているものだけにする
さっき修正したExpiresAtフィールドを参照して、現在の日付よりExpiresAtが新しいモノだけを表示するように。
- jobeet/apps/frontend/modules/job/actions/actions.class.phpを変更
フィクスチャに期限切れのJobデータを追加する
ブラウザから投稿しても期限切れのデータは追加できないので、フィクスチャを使ってデータベースに期限切れJobデータをつっこむ。
- jobeet/data/fixtures/020_jobs.ymlを変更
- ターミナルを開いて、propel:data-loadを実行
Mac:~ kaneda$ cd ~/Sites/jobeet Mac:~ kaneda$ /Applications/xampp/xamppfiles/bin/php symfony propel:data-load
- ブラウザを開いてhttp://jobeet.local/にアクセス。追加したJobが表示されなかったらOK。
有効期限日数を設定ファイルで変更できるようにする。
app.ymlに初期設定項目を追加。
- jobeet/apps/frontend/config/app.ymlを変更
- jobeet/lib/model/JobeetJob.phpの30の所を変更
【覚書】
- app.ymlはアプリケーションのグローバル設定を書く所
- app.ymlに設定した項目はプログラムから参照できるが、参照側で項目名の頭に「app_」という接頭辞を付ける必要がある。
今まで書いたプログラムは間違い。実はモデルレイヤーというところに書くんだ(なんだそれ)
Jobリストを取得するために、アクション内でCriteriaを使って書いていたプログラムをJobeetJobPeer.phpに移動する。
- jobeet/lib/model/JobeetJobPeer.phpにプログラム追加
- jobeet/apps/frontend/modules/job/actions/actions.class.phpを変更
- ついでにjobeet/lib/model/JobeetJobPeer.phpのgetActiveJobsにソート機能を追加。
【覚書】
- データベースからデータを読み込むプログラムは○○Peerというファイル名のファイル内に書くべき。
- $criteria->addDescendingOrderByColumnでソート条件を指定できる。
Jobをカテゴリに基づいて表示されるようにする
アクションクラスから、カテゴリー一覧関数を呼び出し、カテゴリー一覧関数からそのカテゴリに属するJob一覧を取得出来るように変更。トップページのテンプレートもカテゴリを表示するように変更。
トップページのJob一覧の表示件数を制限する
- jobeet/lib/model/JobeetCategory.phpを変更
- jobeet/apps/frontend/modules/job/indexSuccess.phpの14行目を変更。
- jobeet/apps/frontend/config/app.ymlにmax_jobs_on_homepage項目を追加。
サンプルのデータをはめていないので、表示の確認は出来ない。次にサンプルデータをつっこむ。
サンプルデータを動的に生成する
ymlにもプログラムが書けるらしい。
- jobeet/data/fixtures/020_jobs.ymlの一番下にPHPプログラムを追加
- ターミナルを開いて、propel:data-loadを実行
Mac:~ kaneda$ cd ~/Sites/jobeet Mac:~ kaneda$ /Applications/xampp/xamppfiles/bin/php symfony propel:data-load
すごい。Jobが増えた。
- jobeet/apps/frontend/config/app.ymlのmax_jobs_on_homepageを100にしてみる。
表示件数が増えた。
でもよく見るとJobのタイトルが変。調べるて見たところ020_jobs.ymlファイルの文字コードが間違っているのが原因で、改行コードがうまく働いていなかった。020_jobs.ymlファイルの文字コードをUTF-8に変換して再度propel:data-loadするとうまくいった。
【覚書】
- サンプルデータの投入はfixturesを使うんだ。
- ymlファイルはUTF-8で保存。
有効期限切れのページにアクセスしたときに404ページを表示する
まず、phpMyAdminをブラウザで開いて、jobeetデータベースに移動し、SQLタブをクリックして、テキストエリアに、
SELECT id, token FROM jobeet_job WHERE expires_at < NOW()
をコピペして「実行する」ボタンを押す。すると1行だけ結果が表示されるので、その行のidカラムの数字を下のアドレスの「ID」の所に書いてブラウザでアクセス。
http://jobeet.local/frontend_dev.php/job/sensio-labs/paris-france/ID/web-developer-expired
するとJobページが表示される。これを404ページが表示されるように変更する。
- jobeet/apps/frontend/config/routing.ymlのjob_show_userを変更
- jobeet/lib/model/JobeetJobPeer.phpにdoSelectActive関数を追加
- 再度http://jobeet.local/frontend_dev.php/job/sensio-labs/paris-france/ID/web-developer-expiredにアクセス。
「404 | Not Found | sfError404Exception」のページが表示されればOK。