symfony askeet Day5
フォームとページャ
- ログインフォーム
- 質問ページャ
ログインフォーム
まずはsign inというリンクを張る。
frontendのtemplatesのlayout.php
<div id="header"> <ul> <li><?php echo link_to('about', '@homepage') ?></li> <li><?php echo link_to('sign in', 'user/login') ?></li> </ul> <h1><?php echo link_to(image_tag('askeet_logo.gif', 'alt=askeet'), '@homepage') ?></h1> </div>
書いてて思うのはやっぱり楽ですね、link_toだけで呼べちゃうのは。
で、userというモジュールを作るらしいので
symfony init-module frontend user
lsで確認してみると
$ ls -la apps/frontend/modules/ total 0 drwxr-xr-x 5 shota staff 170 6 26 10:48 . drwxr-xr-x 8 shota staff 272 6 25 18:38 .. drwxr-xr-x 8 shota staff 272 6 26 10:35 .svn drwxr-xr-x 5 shota staff 170 6 25 18:54 question drwxr-xr-x 7 shota staff 238 6 26 10:48 user $ ls -la apps/frontend/modules/user/ total 0 drwxr-xr-x 7 shota staff 238 6 26 10:48 . drwxr-xr-x 5 shota staff 170 6 26 10:48 .. drwxr-xr-x 3 shota staff 102 6 26 10:48 actions drwxr-xr-x 2 shota staff 68 6 26 10:48 config drwxr-xr-x 2 shota staff 68 6 26 10:48 lib drwxr-xr-x 3 shota staff 102 6 26 10:48 templates drwxr-xr-x 2 shota staff 68 6 26 10:48 validate
できてますね、とりあえずtemplates内にあるindexSuccess.phpがいらないらしいので削除しちゃいます。
削除が終わったらactions内にあるaction.class.phpを開いて
まず、
/** * Executes index action * */ public function executeIndex() { $this->forward('default', 'module'); }
こいつ↑を削除する。
削除が終わったらアクションを追加する。
public function executeLogin() { $this->getRequest()->setAttribute('referer', $this->getRequest()->getReferer()); return sfView::SUCCESS; }
説明によるとrefererを取得してloginSuccess.phpに結果を渡すと。
loginSuccess.phpも書いていきます。
<?php echo form_tag('user/login') ?> <fieldset> <div class="form-row"> <label for="nickname">nickname:</label> <?php echo input_tag('nickname', $sf_params->get('nickname')) ?> </div> <div class="form-row"> <label for="password">password:</label> <?php echo input_password_tag('password') ?> </div> </fieldset> <?php echo input_hidden_tag('referer', $sf_request->getAttribute('referer')) ?> <?php echo submit_tag('sign in') ?> </form>
input_tagだけでinputタグが作られると。
これは便利。あとはloginアクションを書き換えるだけ。
詳しい説明はaskeetを読むとして
これでユーザーの存在確認とUserテーブルをリクエストできるようになったと。
次に、ログインをしたらログアウトもしなければということで実装。
実装後、anonymousでログインしてみると
ほうほう、自分で1から書いていたときはものすごいコードになって
結果スパゲティになってたのでsymfonyすごいなーとか思いました。
質問ページャ
とんとんとんっと進んでいくので思わず書くこと無いなと思いましたが
以前ページャを使ったときはPEAR::Pagerを使ったのにややこしいなと思ったので
さくさくっと進んでしまうのには正直驚きです。
リファスタリング
今まで書いてきたQuestion内のアクションはモデル側なので
モデルに移設するとあります。適したところにコードを置くということですね。