Hatena::ブログ(Diary)

crazyuplog このページをアンテナに追加 RSSフィード

2009-07-31

学習日記79日目 - Blogapp vol.15 -

スタートアップ研修記はこちらです。

どうも、enomotoです。

毎日書く学習日記は本日が最後です。

これからは気になったことなど有ったら書いていく日記に戻ります。

ということで本日はBlogapp完成の報告を書いていこうと思います。

こういうことができます。

  • はてな記法を使ってブログが書けます。
  • タグが使えます。
  • 検索ができます。
  • カレンダーがついてます。
  • YoutubeURLを書くとプレイヤーが貼り付けられます。

こんな感じになりました。

Frontend

f:id:crazyup:20090731164506p:image

f:id:crazyup:20090731164508p:image

Backend

f:id:crazyup:20090731164507p:image

f:id:crazyup:20090731170836p:image

2009-07-30

学習日記78日目 - Blogapp vol.14 -

スタートアップ研修記はこちらです。

どうも、enomotoです。

そろそろ、8月です。8月怖い><

ということで、今日もはまったことを書きます。

相変わらずバリデータではまっています。

Admin Generatorで作ったBackendのブログ編集画面のバリデータが旨く動きませんでした。

f:id:crazyup:20090730185500p:image

表示自体はエラーメッセージが出るモノの

実際にはデータが保存されている…

なぜだろうと思ってAdmin Generatorが自動的に生成するautoArticleアクションを読んでやっと原因が分かりました。

autoArticleはこうなっていた。

  public function executeCreate()
  {
    return $this->forward('user', 'edit');
  }

  public function executeSave()
  {
    return $this->forward('user', 'edit');
  }

  public function executeEdit()
  {
    $this->user = $this->getUserOrCreate();

    if ($this->getRequest()->getMethod() == sfRequest::POST)
    {
      $this->updateUserFromRequest();

      $this->saveUser($this->user);

      $this->setFlash('notice', 'Your modifications have been saved');
(省略)

流れを読むとCreateもSaveもEditに飛ばされる。

で、

  1. updateUserFromRequestでセットして
  2. saveUserで保存する

という流れを取っていた。

で、自分がやっていたこと。

  • updateUserFromRequest内に保存をするようなコードを書いていた。

そりゃ、バリデーション無視するよなぁ。

問題点

  • 未だにバリデーションの理解があやふや。

2009-07-29

学習日記77日目 - Blogapp vol.13 -

スタートアップ研修記はこちらです。

どうも、enomotoです。

今日は短めに。

ということで今日も相変わらずテストをしていたのですが、

コメントフォームを通さずにURLに投稿内容を書き込んでいたら

投稿されてしまうバグを見つけてしまいました。

validateもymlで書いたんだけどなぁ…

getRequestParameterで受け取ってるから

$_GETも$_POSTもどっちも受け取れるからこうなるのか。

ということでこういう風に対処してみました。

  public function validateComment()
  {
    if($_POST['article_id']) {
      return true;
    }
    return false;
  }

これでいいのかなぁ…

とは、思いますがどうにか動いている様子。

2009-07-28

学習日記76日目 - Blogapp vol.12 -

スタートアップ研修記はこちらです。

どうも、enomotoです。

最近、もうやんに週3のペースで通っているのですがそろそろ自重したほうがいい気がしてきました。

本日はよくわからなかったことをメモしておこうと思います。

MySQLのlongvarcharには限界があるのか?

ブログを作っているのでどれぐらいの長文まで耐えられるのか気になったので

wikipediaから長文を持ってきて貼り付けてテストするとどうも途中で切れてしまう。

おかしいなぁと思って調べてみると65KB以上が表示されないみたいだ。

参考:symfonyにテーブルを作らせた方が嬉しい - それマグで!

Validationの動きの理解が曖昧だった。

validatorのymlを書いててvalidatorの結果がokならexecuteに流れるのは分かるけど

NGだった場合の流れが分かっていなかった。どうしてもわからなかったので聞いてみた。

以下は実際に書いたコード
  public function executeComment()
  {
    // 回答する
    $this->comment = new ArticleComment();
    $this->comment->setArticleId($this->getRequestParameter('article_id'));
    $this->comment->setCommentname($this->getRequestParameter('comment_name'));
    $this->comment->setCommentbody($this->getRequestParameter('comment_body'));
    $this->comment->setCommenthost($_SERVER['REMOTE_ADDR']);
    $this->comment->save();
    
    $this->redirect('@article?id='.$this->getRequestParameter('article_id'));;
  }

  public function handleErrorComment()
  {
    $this->getRequest()->setParameter('id',$this->getRequestParameter('article_id'));
    $this->forward('article','show');
  }

これはブログのコメントの処理をしている部分CommentAction。

Validationした結果が良ければ処理をするようになっています。

showからデータをcommentに送る→commentAction呼び出し→validator

→結果がOK→executeComment実行→redirectでshowに戻す

→結果がNG→handleErrorComment実行→idをParameterにセットしてフォワードする。

で、どこが分からなかったのか?

参考:no title

上記のサイトにバリデーションの流れが書かれているが、

この流れが分からなかったため、handleErrorXXXXを使うことも分からなかった。

なので、handleErrorXXXXが無いときはXXXXError.phpという

テンプレートを呼び出すことになっていることも分からず

エラーメッセージの通り、commentError.phpを作ってごまかしていた。

Copyright © crazyup. All rights reserved.