PHPのRuby on Railsクローンのフレームワーク Akelos PHPをいじってみた出来事のメモ。

Akelosをいじってみるメモ帳

Akelos PHP Blogチュートリアル一覧(全18記事)
Akelos PHP ユーザ認証チュートリアル一覧(全19記事)

2008年08月13日

AkActionMailer、少々苦戦中

正しく使ってるつもりなんだがなぁ。。。
なんかエラーが出る。

明日原因を追ってみよう


Notice: Undefined property: AkMailMessage::$recipients
in C:\xampp\htdocs\akelos\lib\AkActionMailer
\AkMailMessage.php on line 50

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\akelos\lib\AkActionMailer
\AkActionMailerQuoting.php on line 111

Warning: join() [function.join]: Invalid arguments passed in
C:\xampp\htdocs\akelos\lib\AkActionMailer
\AkMailMessage.php on line 127

Notice: Undefined property: AkMailMessage::$subject in
C:\xampp\htdocs\akelos\lib\AkActionMailer
\AkMailMessage.php on line 121

Warning: mail() [function.mail]: "sendmail_from" not set
in php.ini or custom "From:" header missing in
C:\xampp\htdocs\akelos\lib\AkActionMailer\AkMailDelivery
\AkPhpMailDelivery.php on line 16

タグ:雑記
posted by AMUAMU at 04:08| Comment(0) | TrackBack(0) | Akelos | このブログの読者になる | 更新情報をチェックする

2008年08月12日

ActionMailer来たんで再開しよう

ActionMailerの実装がされたので、再開予定
タグ:雑記
posted by AMUAMU at 15:19| Comment(0) | TrackBack(0) | Akelos | このブログの読者になる | 更新情報をチェックする

2008年06月18日

メール処理

v0.9に入る予定のActionMailerを使うか
それとも独自で組むか

AkelosのActionMailerのクラスに関してはsvnで引っ張ってこれるんですよね
ただしRailsのようなgenerate mailerは無いようだ

チュートリアルは、ここを今、悩み中で遅れ中・・・
タグ:雑記
posted by AMUAMU at 10:59| Comment(0) | TrackBack(0) | Akelos | このブログの読者になる | 更新情報をチェックする

2008年06月13日

Akelosでユーザ認証、執筆中

Akelosユーザ認証チュートリアルを、かなりまともな形で執筆中
あと1〜2日で完成するかなぁ・・・

説明を加えるべきメソッドとか多くて、思ったより時間が掛かる;
Railsのユーザ認証の説明を元にしてるんだけど・・・

自分のAkelosの勉強にもなるのでついつい、フレームワーク側のコードを読み入ってしまうww

Railsのattr_accessorや、attr_protectedとの互換機能あたりの実装は面白い。

さぁ、がんばろう。
酒飲みながらだが!!!wwww
タグ:雑記
posted by AMUAMU at 23:23| Comment(0) | TrackBack(0) | Akelos | このブログの読者になる | 更新情報をチェックする

2008年06月11日

Akelos Blogチュートリアル 18.コメント機能を追加する 動作確認

さぁ動作を確認しましょう。
http://localhost/blog/ の記事一覧から、Showボタンを押すと、下にコメントフォームが追加されているはずです。
書き込むとコメントが増えるでしょうか?増えたら成功です。


蛇足の追記 ※Extraなチュートリアルです

ただし、これにはvalidateが入ってないですね。
でも単にvalidate足しただけでは、Postに足したようにはいきません。Commentはビューのテンプレートを持っていないので、モデルにvalidateをいれても、結果を直接表示は出来ません。
コメントをテンプレートを持つ形式にする事も考えられますが、ここでは、flashメッセージを使います。

C:\xampp\htdocs\projects\blog\app\models\comment.php
-------------------------------------------------------
<?php

class Comment extends ActiveRecord
{
  var $belongs_to = 'post';
  
  function validate()
  {
    $this->validatesPresenceOf('body');
  }
  
}

?>
-------------------------------------------------------
まぁ、本当はもっとチェックを入れないとあかんけど、とりあえず。

続いてコントローラ
C:\xampp\htdocs\projects\blog\app\controllers\blog_controller.php
の最後の方、function comment()の中を書き換えます。
-------------------------------------------------------
    function comment()
    {
    //対象となるid情報は来ているかどうか確認
    if(!empty($this->params['id'])){
      //元記事を探して
      $Post = $this->Post->find($this->params['id']);

      if ($this->Request->isPost() &&  //Postデータで来ているか確認
         $Post->comment->create($this->params['comment']) && //作って
         $Post->save() ){  //セーブしてみる
        //validateでエラーが起きているとfalseが帰ってくる
        //validateがokならば、trueが帰ってくる

        //成功したから表示
        $this->flash['notice'] = $this->t('Your comment was successfully added');
        
      }else{  //エラーだと表示させるよ!
        $this->flash['notice'] = $this->t('Your comment error!');
      }
      //書き込み画面に移動
      $this->redirectTo(array('action'=>'show','id'=>$Post->id));
    }else{
      //一覧画面に移動
      $this->redirectToAction('listing');
    }
    }
-------------------------------------------------------
こんな感じ。

コントローラ内で、flashに上のように文字つっこんで、redirectToでページを再読込させると、flashに入れた内容が画面の上部に表示されます。

これで一通り動きます。

次回ユーザ認証・・・
posted by AMUAMU at 23:15| Comment(2) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelos Blogチュートリアル 17.コメント機能を追加する 表示、反映の仕組みなど追加

関連付けしたコメントを表示する枠を作ります。
C:\xampp\htdocs\projects\blog\app\views\blog\show.tpl
を開いて、以下を末尾</div>の前に書き加えてください。
-------------------------------------------------------
  <h2>_{Comments}</h2>
  {loop post.comments}
    <hr/>
    <p>{comment.body}</p>
  {end}

  <hr />

  <h3>_{Add a comment}</h3>
  <%= form_tag :action => 'comment', :id => post.id %> <br />
  <%= text_area 'comment', 'body' %>
    <%= submit_tag 'Comment!' %>
  </form>
-------------------------------------------------------
前半は表示用、中段の<hr/>を挟んで後半は書き込み用です。
関連付けしていれば、こんな感じで表示出来るんだ、ぐらいの把握で今は良いと思います。

続いてコメントの表示と書き込みを反映させるための実際の動作を、コントローラで定義します。

C:\xampp\htdocs\projects\blog\app\controllers\blog_controller.php
を開きます。

まず最初にクラス内の最初の
-------------------------------------------------------
  var $models = 'post';
-------------------------------------------------------
となっているところを

-------------------------------------------------------
  var $models = 'post, comment';
-------------------------------------------------------
と書き換えます。これは、このコントローラで利用するモデルの宣言だと考えて良いかと思います。

続いて、読み出しの指定を書きます。show()アクションが書いてあるところを探してください。
下記のようになっているはずです。
-------------------------------------------------------
    function show()
    {
        $this->post = $this->Post->find(@$this->params['id']);
    }
-------------------------------------------------------
となっているところを

-------------------------------------------------------
    function show()
    {
        $this->post = $this->Post->find(@$this->params['id'],array('include'=>'comment'));
    }
-------------------------------------------------------
と書き換えてください。末尾のところがポイントです。何を取り込む(include)するかを指定します。

※蛇足
これ書かなくてもロード出来そうな気もするけど、わざとなのかな?
これを書くことにより、必要なときだけ子供がロードされるから、色々高速に動きそうだし、個人的にはむしろ好感。これを書けとチュートリアルでは書いて無くて原因探しにちょっと時間使ったけど・・・。
蛇足終了
posted by AMUAMU at 23:11| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelos Blogチュートリアル 16.コメント機能を追加する テーブルの関連付け

コメント機能の追加をします。

まずテーブルの関連付けをします。
1対多の関係として、先ほどの記事1つ1つに対して複数のコメントを付けるモデルを作ります。
どんどん行きますよー

まず、データの保存する先となるモデルを作ります。
コマンドラインで以下を入力してください。
-------------------------------------------------------

C:\xampp\htdocs\projects\blog>c:\xampp\php\php.exe script\generate model Comment

-------------------------------------------------------
モデルとしてCommentというのを作れと指示していますね。

C:\xampp\htdocs\projects\blog\app\models
のディレクトリにcomment.php というのが増えていると思います。
メモ帳などで開いてください。
空のクラスがありますので、その中に1行加えましょう。
-------------------------------------------------------
var $belongs_to = 'post';
-------------------------------------------------------
そのまんま読んで字の如く「 post に属する 」とだけ書きます。
つまりこのCommentモデルはPostモデルを親として見て、関連づけますよということですね。

続いて
C:\xampp\htdocs\projects\blog\app\models\post.php
を開いてください。
先ほどvalidate()を書いていますが、その前にやっぱり一行加えましょう。
-------------------------------------------------------
var $has_many = 'comments';
-------------------------------------------------------
これも読んで字の如く「commentsをたくさん持ちます」となりますね。
つまりPostの子供(0〜複数)としてCommentsを持ちますよ。と関連づけています。

さらに、Commentのデータベースのテーブル内容を定義しましょう。
インストーラークラスのcomment用のファイルがありますので開いてください。
C:\xampp\htdocs\projects\blog\app\installers\comment_installer.php

テーブル定義を書きます。
-------------------------------------------------------
  function up_1()
  {
    $this->createTable('comments',
     'id,'.
     'body,'.
     'post_id'
     );

  }
-------------------------------------------------------
こんな感じで。
ちなみにxxxx_id というところは関連付けされるだろうと想定されて、勝手にMySQLのINDEXにしてくれます。

※蛇足
チュートリアルでは、デフォルト値の埋め込みとかしてますが、実際することって多いんですかね・・・日本語混ざると言語制御の範囲外になるんで、問題も起きやすい気もするから、マルチバイト環境下(日本語環境下)では、やめたほうがいいんじゃないかなー。詳しく調べてないから、よくわからん。後日要調査。蛇足終わり※

マイグレーションしてデータベースに反映させます。
コマンドラインで以下を入れてください。
-------------------------------------------------------

C:\xampp\htdocs\projects\blog>c:\xampp\php\php.exe script\migrate comment install

-------------------------------------------------------
posted by AMUAMU at 23:06| Comment(0) | TrackBack(1) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelos Blogチュートリアル 15.ビューの修正 sintags

Sintagsの説明は割愛・・・そのうち書くかも
文字だけで伝えるの難しい(>_<)
でもビューの修正などには大変便利な機能なので、ちゃんと勉強したほうがいいかと思いますが・・

とりあえずhelperの(例えばC:\xampp\htdocs\projects\blog\app\helpers\blog_helper.phpのような)機能を呼び出したり修正したりをビューでするのが簡単って感じですかね?

※Sintagsのドキュメントを日本語化してるネ申がいらっしゃった。→こちら
神様じゃ
posted by AMUAMU at 23:00| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelos Blogチュートリアル 14.入力チェック機能の追加

次は、入力項目のチェック機能の追加をします。

ここではtitleに文字が入っているかをチェックするようにしましょう。

C:\xampp\htdocs\projects\blog\app\models\post.php
をメモ帳などで開いてください。
空のクラスが書いてあると思いますが、以下の内容をクラス内に足します。

-------------------------------------------------------
  function validate()
  {
    $this->validatesPresenceOf('title');
  }
-------------------------------------------------------

validate内で、postモデルに入れる項目の入力チェックを行うわけです。
ここではvalidatesPresenceOfというチェックを使っています。これはブランク(空のデータ)の入力を許さないというメソッドです。

titileの項目は空データかどうか?を調べてくれます。

他にもvalidate関係の関数はたくさんありますが、APIリファレンスのActiveRecordのBaseにあるAkActiveRecordのメソッド一覧でも見てください。
http://api.akelos.org/ActiveRecord/Base/AkActiveRecord.html#methodvalidate
ここらへんから下ですね。

さて、ブラウザを開いてtitleを入れずにOKして登録してみてください。ちゃんとエラーを表示すると思います。
このエラーの表示はerror_message_helperというものを使っています。
まぁ、わからないひとは、そういうもんがあるとだけ思っておけばOK.
posted by AMUAMU at 22:57| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelos Blogチュートリアル 13.テーブル定義の修正 日付入力機能追加

ちょっと修正をしていこう。

チュートリアルのbody追加は吹っ飛ばしてるけど、このままだと自動で登録される作成日時、更新日時はあるけど、登録したい日付を変えたい場合があるでしょう。

なので、テーブルの定義を追加修正して、日付の入力欄を入れたいと思います。


まずPostインストーラでテーブル定義を変えます。

メモ帳などで下のファイルを開いて下さい。
C:\xampp\htdocs\projects\blog\app\installers\post_installer.php

次のfunction設定をクラス内に追記しましょう。
-------------------------------------------------------
  function up_2()
  {
    $this->addColumn('posts','posted_at');
  }
-------------------------------------------------------
この意味は、2番目の修正版ですよという意味で up_2
addColumnでカラムを追加してくださいと呼び出し、postsテーブルを対象として指定。
カラム名はposted_atだよ。
となっています。xxxxx_atは日時形式に自動的にしてくれるおまじない。

保存します。

先ほどの修正した内容を色々な所に反映させます。
まずデータベースにテーブルの修正を反映させるためマイグレーションを行いましょう。
コマンドラインを開いて以下のコマンドを入れるだけ。
-------------------------------------------------------
C:\xampp\htdocs\projects\blog>c:\xampp\php\php.exe script\migrate post install

Upgrading-----
(mysqlt): SET AUTOCOMMIT=0
-----
-----
(mysqlt): BEGIN
-----
-----
(mysqlt): ALTER TABLE posts ADD posted_at DATETIME
-----
-----
(mysqlt): COMMIT
-----
-----
(mysqlt): SET AUTOCOMMIT=1
-----
Smart Commit occurred

C:\xampp\htdocs\projects\blog>
-------------------------------------------------------
これだけでデータベースへの修正が終了。


続いて登録・表示画面系の修正。これもコマンド1行を打ち込むだけ
-------------------------------------------------------

C:\xampp\htdocs\projects\blog>c:\xampp\php\php.exe script\generate scaffold Post Blog --force --sintags

(メッセージ略)
-------------------------------------------------------

これで終わり。

ブラウザ画面を開いて確認してみましょう。日付の入力枠が増えたと思います。
posted by AMUAMU at 22:53| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。