Home > Akelos

Akelos Archive

Windows + Xampp環境にAkelosで簡易Blogを作ってみる(3)

前回の「Windows + Xampp環境にAkelosで簡易Blogを作ってみる(2)」からの続きです。
この記事はAkelos公式サイトの解説動画を参考にしています。

1). 多言語対応を試してみる

Akelosはデフォで多言語に対応するための仕組みがあるようです。インストール時にen,jaなどを入力したのはこのためだったようですね。app/locales/blog/jp.phpを開いて、$dictionary['The Akelos Blog'] に格納されている値を日本語の任意の文字列に変更してください。一覧ページのタイトルが変更されていることを確認できると思います。

image

ここで、「http://localhost/en/blog/listing/」を開いてみましょう。タイトルは元の「The Akelos Blog」であることが確認できると思います。en.phpもjp.phpと同じフォルダ内に存在します。この機能と.htaccessを使えば、多言語対応のサービスが簡単に作れそうですね。

2). ログをとる

config/config.phpを編集して、ログファイルを出力するように設定を変更します。、boot.phpのインクルード処理の前にAK_LOG_EVENTSを定義します。

define('AK_LOG_EVENTS', true);
include_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'boot.php');

登録や更新処理を行うとlog/development.logが生成され、ログ出力されていることを確認できると思います。

3). ユニットテスト

ユニットテストを試してみます。test/unit/app/modelsに生成したモデルに合わせて、ユニットテスト用のファイルが格納されているので、testコマンドで実行してみます。

php test ./unit/app/models/post.php

コマンドが実行された後、1件の失敗があることを確認できると思います。

image

では、テストが通るパターンを試してみましょう。test/unit/app/models/post.phpを開き、test_should_be_added()関数を下記のように書き直します。

function test_should_be_added()
{
$Post = new Post(array('title'=>'First test post', 'body'=>'Say hello'));
$Post->comment->create(array('body'=>'hello!'));
$Post->save();
$Post->reload();

$this->assertEqual(1, $Post->comment->count());
}

また、test/unit/app/models/comment.phpのtest_should_be_added()関数の中身は全てコメントアウトし、app/installers/comment_installer.phpの初期コメント生成の処理もコメントアウトします。

//$Post = new Post(1);
//$Post->comment->create(array('body'=>"コメントをどうぞ。"));
//$Post->save();

再度、コマンドを実行します。

php test ./unit/app/models/post.php

今度はテストが通ったことを確認できると思います。

image

解説動画では、Akelosコンソールで更に何かをしているようですが、あまり重要そうではないので省きます。

まとめ

解説動画を元に実際にAkelosをインストールして、簡単なBlogの作成、ユニットテストまで行いましたが、バージョンの違いのせいか、ところどころ異なる点がありました。ただ、触っていて感じたことは、「噂どおりCakePHPより良さそうだ」ということです。2つのフレームワークの比較について、時間があればまた記事にしてみたいと思います。

Windows + Xampp環境にAkelosで簡易Blogを作ってみる(2)

前回の「Windows + Xampp環境にAkelosで簡易Blogを作ってみる(1)」からの続きです。
この記事はAkelos公式サイトの解説動画を参考にしています。

1). 部品の共有化

エントリー内容を表示する部分を共有化します。新しくapp/views/blog/_post.tplファイルを作成し、app/views/blog/show.tplの下記のソースをコピー&ペーストしてください。

・_post.tpl

    <hr />
    <h2><?php echo $url_helper->link_to($post->title, array('action'=>'show', 'id'=>$post->id)); ?></h2>
    <p><?php echo $text_helper->textilize($post->body); ?></p>
    <p><small>{post.posted_at}<?php echo $blog_helper->link_to_edit($post); ?></small></p>

次にこの部品化された_post.tplをshow.tplとlisting.tplから呼び出します。app/views/blog/show.tplとapp/views/blog/liting.tplを下記のように書き直してください。

・show.tplのshowブロックを下記のように書き換え

  <div class="show">
    <?php echo $controller->render(array('partial'=>'post')); ?>
  </div>

・liting.tplのcontentブロックを下記のように書き換え

<div id="content">
  <h1>_{The Akelos Blog}</h1>
  {?posts}
     <?php echo $controller->render(array('partial'=>'post', 'collection'=>$posts)); ?>
  {end}
</div>

ソースを書き直したら、ブラウザで今まで通り問題なく処理されていることを確認してください。

2). コメントテーブルを作成

コメント機能を実装するためにCommentモデルを作成します。下記のコマンドを実行してください。上手くいかない場合は最後に–forceを付けて実行してください。

php generate model Comment

次はapp/models/comment.phpとapp/models/post.phpにお互いの依存関係をソースに追加します。

・comment.php

<?php
class Comment extends ActiveRecord
{
  var $belongs_to = 'post';
}
?>

・post.phpのfunction validate()の上に追加

<?php
class Post extends ActiveRecord
{
	var $has_many = 'comments';

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

次にapp/installers/comment_installer.phpを下記のように書き換えます。

<?php
class CommentInstaller extends AkInstaller
{
    function up_1()
    {
        $this->createTable('comments', "
          id,
          body,
          post_id
        ");

        AK::import('post,comment');

        $Post = new Post(1);
        $Post->comment->create(array('body'=>"コメントをどうぞ。"));
        $Post->save();
    }

    function down_1()
    {
        $this->dropTable('comments');
    }
}
?>

installerファイルを作ったら、コマンドを入力してテーブルを作成します。

php migrate comment install

commentテーブルが作成され、レコードが1つ作成されていることが確認できると思います。このコメントをshowページに表示させるため、app/controllers/blog_controller.phpとapp/views/app/views/blog/show.tplにソースを追記します。

・blog_controller.phpのshowアクションのfind関数の引数にコメント情報を追加します。

function show()
{
    $this->post =&amp; $this->Post->find(@$this->params['id'], array('include'=>'comments'));
}

・show.tplのcontentブロックの最後に追加します。

<h2>_{Comments}</h2>
{loop post.comments}
  <hr />
  <p>{comment.body}</p>
{end}

showページをリロードしてコメントが表示されていることを確認してください。

image

3). コメント欄を実装

app/views/blog/show.tplにコメント欄のソースを追加します。先ほどのコメントを表示するソースの後に追加します。

  <h3>_{Add a comment}</h3>
  <?php echo $form_tag_helper->form_tag(array('action'=>'comment', 'id'=>$post->id)); ?>
    <?php echo $form_helper->text_area('comment','body'); ?><br />
    <?php echo $form_tag_helper->submit_tag("Comment!"); ?>
  </fom>

app/controllers/blog_controller.phpに、commentアクションを追加します。

  function comment()
  {
    $Post = $this->Post->find($this->params['id']);
    $Post->comment->create($this->params['comment']);
    $Post->save();

    $this->flash['notice'] = $this->t('Your comment was successfully added');
	$this->redirectTo(array('action'=>'show', 'id'=>$Post->id));
  }

showページに入力欄が表示されます。コメントを入力して、正しく動作しているか確認してください。

image

次回に続きます。

Windows + Xampp環境にAkelosで簡易Blogを作ってみる(1)

前回の「Windows + Xampp環境にAkelosのscaffoldを構築してみる(2)」からの続きです。
ちなみにこの記事はAkelos公式サイトの解説動画を参考にしています。

1).エラー判定を実装

scaffoldを作って一通りのCRUDを確認しましたが、もう少し実用的にするためにTitle項目に必須エラー判定を実装します。app/models/post/post.phpにvalidate関数を実装します。

<?php
class Post extends ActiveRecord
{
	function validate()
	{
    	$this->validatesPresenceOf('title');
	}
}
?>

画面を開き、Titleを空にして登録、または更新をしてみましょう。次のようにエラーメッセージが表示され、処理が中断されます。

image

2).ViewファイルのRails形式とPHP形式について

AkelosではViewファイルをRails形式に書くこともできるようです。次のコマンドをscriptフォルダからコマンドプロンプトで実行してください。

php generate scaffold Post Blog --force --sintags

Viewファイルが書き換えられます。例として変更前と後のソースを下記に載せておきます。

書換前

<td class="operation"><?php  echo  $blog_helper->link_to_show($post)?></td>
<td class="operation"><?php  echo  $blog_helper->link_to_edit($post)?></td>
<td class="operation"><?php  echo  $blog_helper->link_to_destroy($post)?></td>

書換後

<td class="operation"><%= link_to_show post %></td>
<td class="operation"><%= link_to_edit post %></td>
<td class="operation"><%= link_to_destroy post %></td>

公式の解説動画ではRails形式で解説を続けていますが、このブログではphp形式で解説を進めてみます。
もう一度次のコマンドを実行して、Viewファイルをphp形式に直します。

php generate scaffold Post Blog --force

3). viewファイルをブログ風に書き直していく

app/views/blog/listing.tplをブログ風になるように次のように書き換えます。

<div id="sidebar">
	<h1>_{Tasks}:</h1>
	<ul>
		<li><?php  echo  $url_helper->link_to($text_helper->translate('Create new Post'), array('action' => 'add'))?></li>
	</ul>
</div>

<div id="content">
	<h1>_{The Akelos Blog}</h1>
	{?posts}
		{loop posts}
		<hr />
		<h2><?php echo $url_helper->link_to($post->title, array('action'=>'show', 'id'=>$post->id)); ?></h2>
		<p>{post.body}</p>
		<p><small></small>{post.posted_at}<?php echo $blog_helper->link_to_edit($post); ?></p>
		{end}
	{end}
</div>

ページを開くと次のように変更されているのが、確認できると思います。

image

更にapp/views/blog/show.tplを次のように書き換えてみます。

<div id="sidebar">
<h1>_{Tasks}:</h1>
<ul>
	<li><?php  echo  $url_helper->link_to($text_helper->translate('Edit this Post'), array('action' => 'edit', 'id'=>$post->getId()))?></li>
	<li><?php  echo  $url_helper->link_to($text_helper->translate('Back to overview'), array('action' => 'listing'))?></li>
</ul>
</div>

<div id="content">
	<h1>_{Posts}</h1>
	<div class="show">
	<hr />
	<h2><?php echo $url_helper->link_to($post->title, array('action'=>'show', 'id'=>$post->id)); ?></h2>
	<p><?php echo $text_helper->textilize($post->body); ?></p>
	<p><small>{post.posted_at}<?php echo $blog_helper->link_to_edit($post); ?></small></p>
</div>

text_helperのtextilizeを使うことで、Wikiのように強調や斜体で文字を飾りつけることができるようになります。下記の例のように入力を行い、show画面で確認してみてください。(ただし、日本語には対応できていないようです。)

image

image

次回に続きます。

ホーム > Akelos

検索
フィード
メタ
お城
STUDIO KINGDOM

Return to page top