symfony askeet Day 4続き

  • ルーティング

ルーティング

今使っているURLは
http://askeet.localhost/question/show/id/1
だけれども、
http://askeet.localhost/question/what-shall-i-do-tonight-with-my-girlfriend
にしたい。
ということでまずタイトルの別バージョンを作る。と、ある。
What shall I do tonight with my girlfriend?だとURLにそのまま使えないので変換したものを用意すると。
askeetではXMLで書かれていますが、昨日の件で懲りたのでYAMLで書きます。

  ask_question:
    _attributes: { phpName: Question, idMethod: native }
    id:          { type: integer, required: true, primaryKey: true, autoIncrement: true }
    user_id:     { type: integer, foreignTable: ask_user, foreignReference: id }
    title:       { type: longvarchar }
    body:        { type: longvarchar }
    interested_users: { type: integer, default: 0 }
    stripped_title: { type: varchar(255) }
    _uniques:
      unique_stripped_title: [stripped_title]

参考:http://blog.symfony.jp/2006/12/18/93
見よう見まねで書いたのでこれで大丈夫か?
おっかなびっくりの状態でモデルを構築して、SQL文作って、MySQLSQL文を流してみた。

symfony propel-build-model
symfony propel-build-sql
symfony propel-insert-sql

そして、MySQLをたたいてみると

mysql> desc ask_question
    -> ;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(11)      | NO   | PRI | NULL    | auto_increment | 
| user_id          | int(11)      | YES  | MUL | NULL    |                | 
| title            | text         | YES  |     | NULL    |                | 
| body             | text         | YES  |     | NULL    |                | 
| interested_users | int(11)      | YES  |     | 0       |                | 
| stripped_title   | varchar(255) | YES  | UNI | NULL    |                | 
| created_at       | datetime     | YES  |     | NULL    |                | 
| updated_at       | datetime     | YES  |     | NULL    |                | 
+------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

ちゃんと追加されているっぽい。
あとはmyTools.class.phpを書いて
Question.phpにコード追加して

symfony cc
php batch/load_data.php

SQL文を更新すれば準備はOK
あとは表示するリンク部分を変更するだけ。
ということでほげほげと直していく。
直し終われば、
http://askeet.localhost/frontend_dev.php/question/show/stripped_title/what-shall-i-do-tonight-with-my-girlfriend
と、いう感じでいまどきのWebサービスっぽいURLになりました。
ただ、show/stripped_titleの部分が邪魔ということでさくっと除去することに。
これはfrontendのconfigの中にあるrouting.ymlに書けばカイケツします。
便利ですね。
ここでよく読まないで設定して反映されなかったのですがよく読むと一番最初に書けとあるので
それだけは要注意です。一番最初に書かれたモノが優先されるということでしょうか。