Jobeet 7日目
7日目です。
job(仕事)をカテゴリ別に並び替えることをしました。
sluggable
7日目はページャが主体でしょうか?
ページャは特にこれといったものはなかったけど
それよりDoctrineのschemaのsluggableのほうが気になってしょうがない。
コレ↓
JobeetCategory: actAs: Timestampable: ~ Sluggable: fields: [name] columns: name: type: string(255) notnull: true
これでデータベースを生成するとslugというカラムが作られます↓
- +
Field Type Null Key Default Extra
- +
id bigint(20) NO PRI NULL auto_increment name varchar(255) NO NULL created_at datetime YES NULL updated_at datetime YES NULL slug varchar(255) YES UNI NULL
- +
いままでわざわざslugifyしてたのとはおさらばです↓
<?php // lib/Jobeet.class.php /* sluggableをつかうので必要なし public function getSlug() { return Jobeet::slugify($this->getName()); } */ ?>
で、実際にMVCの連携ではどのようになるかというと
(※今回はカテゴリの詳細へのリンクである。)
・ルーティングルール
#routing.yml category: url: /category/:slug class: sfDoctrineRoute param: { module: category, action: show } options: { model: JobeetCategory, type: object }
・テンプレートからルーティングへのアクセス
// module/job/templates/indexSuccess.php <?php echo link_to($category, 'category', $category) ?>
↑ちょっとわかりにくいが、
- $categoryはオブジェクトで、第一引数は__toString()で定義したものの表示がそのままリンク名に
- 第二引数はルーティングへのアクセス("@"は使わなくてよくなった)
- 第三引数はオブジェクトをそのままをわたしている(こうすることでURLにパラメータを的確につけてくれる)
ほんで、ルーティングの次はカテゴリ詳細アクション。
<?php //module/category/action/actions.class.php public function executeShow(sfWebRequest $request) { $this->category = $this->getRoute()->getObject(); }
↑なんじゃこりゃ!!!って思ったのですが
URLのパラメータから条件しぼってカテゴリオブジェクト取ってきてるっぽい。
(※細かい中身は未調査。。)
要はうまいことやってくれる。
しかしこれは便利というか、、逆にわかりづらいという印象を受けた。
そしてカテゴリ詳細テンプレート↓
// module/category/templates/showSuccess.php(例) <table> <?php foreach ($category as $job): ?> <tr> <td><?php echo $job->get('name') ?></td> <td><?php echo $job->get('description') ?></td> </tr> <?php endforeach; ?> </table>
といった感じ。
なんか、なんでも楽にできちゃって、逆に分かりにくくなるんじゃないかな。。と思った。
でも慣れたら簡単かも。