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文作って、MySQLにSQL文を流してみた。
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に書けばカイケツします。
便利ですね。
ここでよく読まないで設定して反映されなかったのですがよく読むと一番最初に書けとあるので
それだけは要注意です。一番最初に書かれたモノが優先されるということでしょうか。