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

Akelosをいじってみるメモ帳

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

2008年11月09日

そろそろ再開しよう

20081109171527.jpgそろそろ更新を再開しようかなと

というのも行政書士試験の勉強していたので・・・(以下略
とりあえず試験は終わったので
仕事の息抜きにAkelos触る時間が増やすつもりなんでー

間違いがあって、ご指摘いただいた点も直します_(._.)_

posted by AMUAMU at 17:23| Comment(48) | TrackBack(2) | どうでもいいこと | このブログの読者になる | 更新情報をチェックする

2008年09月05日

Blog screencast チュートリアルのコメント表示が出来ない問題

Akelos-jaのメーリングリストでも話題に出ていますが、Akelos公式サイトのBlogチュートリアルの動画(Screencast)でコメント表示の所の挙動が確かに謎。

今回私が書いたチュートリアルでは明示的にincludeを書いて先読み動作させていますが、果たしてこれで正しいの?

動画チュートリアルにあるように何も書かないで行けるパターンってあるんですかね?


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

続いて、読み出しの指定を書きます。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)するかを指定します。

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

2008年09月03日

Akelos Blogチュートリアル一覧(全18記事)

Akelos Blogチュートリアル一覧(全18記事)

1.はじめに
http://akelos.seesaa.net/article/100211099.html

2.初期のセットアップ script/setup
http://akelos.seesaa.net/article/100211283.html

3.httpd.confの修正(主にWindowsユーザのみ)
http://akelos.seesaa.net/article/100211451.html

4.いっかい確認
http://akelos.seesaa.net/article/100211960.html

5.DB設定 初期DBを作る
http://akelos.seesaa.net/article/100212219.html

6.設定の続き
http://akelos.seesaa.net/article/100212562.html

7.Blogコントローラ初期作成
http://akelos.seesaa.net/article/100212869.html

8.Postモデルを作る
http://akelos.seesaa.net/article/100213158.html

9.Postモデルのテーブル定義を書く
http://akelos.seesaa.net/article/100213366.html

10.マイグレーション migration
http://akelos.seesaa.net/article/100214297.html

11.色々自動生成 scaffold
http://akelos.seesaa.net/article/100214594.html

12.ルート設定、動作確認
http://akelos.seesaa.net/article/100214873.html

13.テーブル定義の修正 日付入力機能追加
http://akelos.seesaa.net/article/100215332.html

14.入力チェック機能の追加
http://akelos.seesaa.net/article/100215769.html

15.ビューの修正 sintags
http://akelos.seesaa.net/article/100216167.html

16.コメント機能を追加する テーブルの関連付け
http://akelos.seesaa.net/article/100216587.html

17.コメント機能を追加する 表示、反映の仕組みなど追加
http://akelos.seesaa.net/article/100217165.html

18.コメント機能を追加する 動作確認
http://akelos.seesaa.net/article/100217845.html


以下、ユーザ認証チュートリアルへ続く
posted by AMUAMU at 00:03| Comment(1) | TrackBack(0) | チュートリアル目次 | このブログの読者になる | 更新情報をチェックする

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

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

1.ユーザ認証機能を作るよ!
http://akelos.seesaa.net/article/105874461.html

2.Userモデルを作る。
http://akelos.seesaa.net/article/105874495.html

3.Userモデルをちゃんとする その1 属性設定
http://akelos.seesaa.net/article/105874534.html

4.Userモデルをちゃんと その2 validation
http://akelos.seesaa.net/article/105875522.html

5.Userモデルをちゃんと その3 beforeCreate/beforeUpdate
http://akelos.seesaa.net/article/105875619.html

6.Userモデルをちゃんと その4 その他関係するメソッド実装
http://akelos.seesaa.net/article/105875692.html

7.Userモデルの確認 完成したUserモデル
http://akelos.seesaa.net/article/105875728.html

8.Accountコントローラを作る 枠組み自動作成
http://akelos.seesaa.net/article/105875783.html

9.Accountコントローラの中身 認証確認 beforeFilter
http://akelos.seesaa.net/article/105895288.html

10.Accountコントローラ アクション実装1
http://akelos.seesaa.net/article/105900567.html

11.Accountコントローラ アクション実装2
http://akelos.seesaa.net/article/105900741.html

12.Accountコントローラ 管理者アクション実装
http://akelos.seesaa.net/article/105918009.html

13.ApplicationControllerの実装 共通処理
http://akelos.seesaa.net/article/105918346.html

14.メール処理の実装 ActionMailer その1 生成とモデル
http://akelos.seesaa.net/article/105918922.html

15.メール処理の実装 ActionMailer その2 コントローラとビュー
http://akelos.seesaa.net/article/105919353.html

16.routes.phpの編集 ルートの編集
http://akelos.seesaa.net/article/105919651.html

17.Viewの編集
http://akelos.seesaa.net/article/105920107.html

18.Account機能の動作テスト
http://akelos.seesaa.net/article/105920597.html

19.Blogチュートリアルにユーザ認証を組み込む
http://akelos.seesaa.net/article/105921873.html

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

2008年09月02日

ということで・・・Akelosチュートリアル執筆完了

ということで、書こうと思ったチュートリアルの範囲を
全部書ききったぞーーーーー!!!

途中、仕事が忙しく中断したので2ヶ月強に渡っての執筆になっちゃいましたが、どうだろうなぁ、この内容。

間違ってるところとかありそうだけど、確認するつもりはない(ーー;

せっかくなので、どなたか、間違いなどの突っ込みや、感想をお待ちしております;

これ、ソースコード部分が見にくいんで、
そのうち整形してWikiとかに転記したいなぁと思いつつ
腰が重い、今日この頃
タグ:雑記 akelos
posted by AMUAMU at 23:56| Comment(0) | TrackBack(0) | どうでもいいこと | このブログの読者になる | 更新情報をチェックする

Akelosユーザ認証チュートリアル 19.Blogチュートリアルにユーザ認証を組み込む

やっと最終目的を達するための最後の実装です。

Accountコントローラが正常に動作したことを確認しましたら、以前作ったBlogチュートリアルにユーザ認証を組み込みます。
ユーザ認証チュートリアルの最初でこう書きました。確認してみます。

ということで、ユーザ認証を前回までに作ったBlogチュートリアルのサイトに組み込んでみようかと思う。
方向性としては、new Post、Edit、Deleteにユーザ制限を加え、ユーザ登録した人だけがこれらのアクションに触れるようにする。


でわ、これを実装します。

C:\xampp\htdocs\projects\blog\app\controllers\blog_controller.php
を開いて下さい。

Blogコントローラクラスの中に下記を追加します。

function __construct()
{
// beforeFilterで、自動的にApplicationControllerの_authpageメソッドを呼ぶように指定。
//認証済みユーザのみの制限をかけたいアクションを指定している。
$this->beforeFilter(array('_authpage'=>array('only'=>array('add','edit','destroy'))));
}


これで終わりです。

・・
・・・・・
・・・・・・・・・
そうです、これだけで終わりなんです。
とっても簡単。

なんて素晴らしい。
何て楽でしょう。
後の所には手を入れる必要ありません。

実際の動作を http://localhost/blog/ にアクセスして確認してみましょう。

どうですか?認証が掛かっていますか?
ログインしたら表示しますか?

このように一回ユーザー認証用の機能実装を行えば後は非常に簡単に機能を再利用して、簡単に認証ページ(認証の必要なアクションやコントローラ)が追加できます。


これでユーザ認証チュートリアルは終了しますが、いくつか修正すべき点があります。
これらは、ここまでのチュートリアルの内容の延長にあるので自力で試して解決してみるのが良いと思います。

以下に問題点やそのヒントを書きます。

・Account機能一覧ページと、Blogの記事一覧ページとの間の行き来が出来ない。
→view内の各種テンプレートを修正して、相互のリンクを追加しましょう。
・英語表記を日本語表記にしたい
→C:\xampp\htdocs\projects\blog\app\locales\account\ja.php のファイルを編集しましょう。
・アカウント修正したときにメールアドレス修正したらメール送信したらどうだろう?
→notifymailとaccount_controllerの修正で
・メールアドレスの存在確認とか欲しいよね
→存在確認用のテーブルとか必要かなぁー、ここまでの応用と routes.php 当たりの修正でいけますよ。たぶん
・折角アカウント登録しているのに、Blogの記事登録や修正時に認証した人のidが保存されていない。
→これはちょっと難しいかも。

気が向けば、上の何れかはチュートリアル書こうかなぁ

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

Akelosユーザ認証チュートリアル 18.Account機能の動作テスト

これで一通りのAccount機能が実装されました。
早速ブラウザで http://localhost/blog/account/ のように配置している場所を指定してアクセスしてみましょう。

最初のページはindexアクションで出来た機能一覧のページです。

この機能一覧のページに入った段階ではログインはしていません。
試しに modifyページ等に入ってみましょう。
入れないで、ログインフォームが表示されれば問題ありません。

何かしらエラーが出たら、コードにミスがあります。入力ミスが多いと思いますが、エラーの内容を見て、よく調べて修正しましょう。


でわ、実際の登録を New registページからしてみて、
さらに、ログインや、ログアウト、データ修正やアカウント削除(停止)などをしてみて動作確認しましょう。

ちなみに、Windows環境ではSMTPでのメール送信が出来ないのでメール送信エラーが出ると思います。
http://homepage2.nifty.com/spw/software/radish/
のようなWindowsローカルで動作する簡易SMTPサーバソフトをインストールしてテストをすれば、デバッグも楽です。
このRadishというソフトは、配送を停止したり、キューを確認したり、受信ログを表示出来たりするので、Windows環境でのメール送信に関するデバッグには最適なソフトなので、オススメ。
設定とかはRadishの説明を見て下さい。

最後に、管理者アカウントとしてuser.phpで指定したメールアドレスで登録をして、管理者しかみれないはずのuserlistなどを確認してください。

全てが動作し、エラー表示がされなければAccount機能はめでたく完成です。

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

Akelosユーザ認証チュートリアル 17.Viewの編集

さぁ、ラストスパートです。
コントローラの各アクションに対応したViewつまり、html生成部分を書きます。
scaffoldでAccountコントローラを作りましたので、listing、show、add、create、edit、destroyの各アクションに対応したViewはある程度、自動生成されています。
逆にそれ以外のアクションに関しては自分で書く必要がありますが、scaffoldが自動生成してくれた上記のアクションのコードを元にしていきながら、書いていきましょう。

Viewは下記のディレクトリに配置されています。
C:\xampp\htdocs\projects\blog\app\views\account\
ここには各アクションに対応したテンプレートがあります。

また、共通のレイアウトファイルとして
C:\xampp\htdocs\projects\blog\app\views\layouts\account.tpl
が作られています。

今回はレイアウトはいじりませんので、各アクションに対応したテンプレートのほうを修正します。


まず、 _form.tpl を開きます。
これはアクション毎のテンプレートから内部呼び出しされる、共通のフォームテンプレートです。

saltに対応した部分が中央にありますが、saltはモデル側で生成されるものなので必要ありません。
消しましょう。
変わりにパスワードの再入力枠を作る必要があります。
また、パスワード入力部分はパスワード型のフォームになおします。

これらを反映させた変更後の内容を、以下に示します。

<%= error_messages_for 'user' %>


<p>
<label for="user_name">_{Name}</label><br />
<%= input 'user', 'name' %>
</p>

<p>
<label for="user_passwd">_{Passwd}</label><br />
<%= password_field 'user', 'passwd' %>
</p>

<p>
<label for="user_passwd_confirmation">_{passwd confirmation}</label><br />
<%= password_field 'user', 'passwd_confirmation' %>
</p>

<p>
<label for="user_email">_{Email}</label><br />
<%= input 'user', 'email' %>
</p>

<p>
<label for="user_is_enable">_{Is enable}</label><br />
<%= input 'user', 'is_enable' %>
</p>

これは管理者用画面で使われますが、これをベースにコピペしていく形になると思います。

これを使うのはadd.tpl等です。add.tpl側は今回は修正ありませんが、呼び出しをしているところは見ておきましょう。

次に修正するのは delete.tpl です。
これは標準では生成してくれていませんので、中身はエラーになっています。
最初に書いてある内容は消して、自動生成してくれたdestroy.tplを参考に、内容を入れます。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<p>_{Are you sure you want to delete this User?}</p>
<%= start_form_tag :action => 'delete' %>
<%= confirm_delete %>
</form>
</div>


続いて index.tpl です。
indexでは各機能へのリンクだけを取りあえず表示します。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Account Page Index}</h1>

<p><%= link_to _('Login page'), :action =>'login' %></p>
<p><%= link_to _('New regist page'), :action =>'regist' %></p>
<p><%= link_to _('Remind password page'), :action =>'remind' %></p>
<p><%= link_to _('New regist page'), :action =>'regist' %></p>

<h1>_{Account Page Index}</h1>
<p><%= link_to _('Logout'), :action =>'logout' %></p>
<p><%= link_to _('Modify account profile'), :action =>'modify' %></p>
<p><%= link_to _('Delete account'), :action =>'delete' %></p>

<h1>_{Admin Page Index}</h1>
<p><%= link_to _('Userlist'), :action =>'listing' %></p>


</div>

ここではとりあえず、ログイン後じゃないと扱えないもの、管理者じゃないと扱えないものもリンクしています。
後で表示の制御を入れるか考えます。


続いてログイン用ページ login.tpl を開いてください。
IDとパスワードの入力枠を用意します。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<p>_{Account Logout}</p>
<%= start_form_tag :action => 'login' %>
<p>
<label for="user_email">_{Email}</label><br />
<%= input 'user', 'email' %>
</p>
<p>
<label for="user_passwd">_{Passwd}</label><br />
<%= password_field 'user', 'passwd' %>
</p>
</form>
</div>



続いてログアウト用ページ logout.tpl を開いてください。
ここに来るときは既にログアウトしているはずですが、一応リンクを入れておきます。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<p><%= link_to _('Logout'), :action =>'logout' %></p>
</form>
</div>


続いて、アカウント情報修正用ページ modify.tpl を開いてください。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<%= start_form_tag :action => 'modify' %>

<div class="form">
<h2>_{Editing User}</h2>
<%= render :partial => 'form' %>
</div>

<div id="operations">
<%= save %> <%= cancel %>
</div>

</form>
</div>

ここでは最初に編集した_form.tplを利用しています。
このように定型的に使うフォームなどは再利用し、フォームの内容修正が統一的に行われるようにします。


次は、アカウント登録用ページ regist.tpl を開いてください。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<%= start_form_tag :action => 'regist' %>

<div class="form">
<h2>_{User Profile}</h2>
<%= render :partial => 'form' %>
</div>

<div id="operations">
<%= save %> <%= cancel %>
</div>

</form>
</div>

ここも同じように_form.tplを使っています。
先ほど編集したmodify.tplとはメッセージが異なるだけです。
再利用が効いてるわけです。



次は、アカウント登録用ページ remind.tpl を開いてください。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<%= start_form_tag :action => 'remind' %>

<div class="form">
<h2>_{User Profile Regist}</h2>
<p>
<label for="user_email">_{Email}</label><br />
<%= input 'user', 'email' %>
</p>
</div>

<div id="operations">
<%= save %> <%= cancel %>
</div>

</form>
</div>



最後に、アカウント登録後に表示するWelcomeページ welcome.tpl を開いてください。
下記に内容を示します。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
<li><%= link_to _('Back to user index'), :action => 'index' %></li>
</ul>
</div>

<div id="content">
<h1>_{Users}</h1>

<h2>_{Thank you for regist!}</h2>
<p>
<%= link_to _('Back to user index'), :action => 'index' %>
</p>
</form>
</div>
posted by AMUAMU at 22:35| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

Akelosユーザ認証チュートリアル 16.routes.phpの編集 ルートの編集

あと少しです。テストする前にAccount関係のコントローラが正常に動くようにURLのルートの設定をします。
実際、設定しなくてもある程度は大丈夫なのですが、index処理などが曖昧になるので設定した方が無難ってことで。
実際、複雑なことを今後しようと思ったらroutes.phpの編集は必須ですしね。

ということで、C:\xampp\htdocs\projects\blog\config\routes.php のファイルを開いてください。
以前書いた/blogの設定があると思います。

これを下記のようにしてください。


<?php

// You can find more about routes on /lib/AkRouters.php and /test/test_AkRouter.php

$Map->connect('/account/', array('controller' => 'account', 'action' => 'index'));
$Map->connect('/', array('controller' => 'blog', 'action' => 'listing'));
$Map->connect('/:controller/:action/:id', array('controller' => 'blog', 'action' => 'listing'));
?>

Mapを足しています。 /account/ として来た場合は、accountコントローラのindexアクションを実行しろと足しました。

ちなみにMapは上から順に優先的に評価されますので、上から順に個別の動作を書いていき、だんだん簡単なアドレスの設定を書いていって、最後にマルチエイリアスとして広く動作するもの書く必要があります。
もし、これの書く順序が逆ですと、 /account/ としてリクエストが来た場合、action指定が無いわけですから、'/'の時の設定が優先され、accountコントローラのlistingアクションが実行されてしまうのです。
省略アドレス時は、先に書いてあるもので一致するものを取り出す仕組みなので。

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

Akelosユーザ認証チュートリアル 15.メール処理の実装 ActionMailer その2 コントローラとビュー

続いて、メール送信の実際の呼び出しをAccountコントローラに追加します。

下記のファイルを開き編集します。
C:\xampp\htdocs\projects\blog\app\controllers\account_controller.php

追記するアクションはregistアクションとremindアクションです。
各アクションでコメントで後で実装としていたメール部分を下記のようにします。

registアクション内

Ak::import_mailer('notifymail');
$m = new Notifymail();
$m->deliver('regist',$this->User);


remindアクション内

Ak::import_mailer('notifymail');
$m = new Notifymail();
$m->deliver('remindpassword',$u);


import_mailerで使うモデルを指定し、deliverメソッドで呼び出しています。
deliverメソッドの最初の引数はアクション名、2つめ引数はテンプレートに展開する配列です。ここではユーザモデルをそのまま投入しています。

これでコントローラ側の実装は終了です。


続いて、実際のメール本文を修正します。
アクション名と同じ名前のtplファイルがviews\notifymail以下のディレクトリにあります。

まずは、regist時のメールを編集します。下記のファイルを開いてください。
C:\xampp\htdocs\projects\blog\app\views\notifymail\regist.tpl
元々入っているメッセージは必要ありませんので削除して、下記のようにします。

{User.name} 様

ご登録ありがとうございました。
以下の内容で登録が完了しましたのでご連絡いたします。

お名前:{User.name}

パスワード:{User.passwd_confirmation}

ご登録メールアドレス: {User.email}

==========================
サンプルサイト
example@sample.com
==========================


同様に、remindpassword時のメールを編集します。下記のファイルを開いて編集してください。
C:\xampp\htdocs\projects\blog\app\views\notifymail\remindpassword.tpl

{User.name} 様

パスワードを再発行しました。

パスワード:{User.passwd_confirmation}


==========================
サンプルサイト
example@sample.com
==========================


{}に囲まれているところはbody変数に入れた配列のうち、展開する変数を指定しています。
{}内が書き換えられて送信されます。
パスワード表記の所が、passwd_confirmationを指定しているのは、passwd自体は暗号化されているためです。passwd_confirmationは入力したときしか設定されていませんので、安全にメール内に入れることが可能になっています。

以上で、メール送信に関する処理、ActionMailer周りの実装は終了です。
posted by AMUAMU at 22:21| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする

広告


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

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

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


×

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