CakePHPからAkelosに入門

1月 15th, 2008 admin Posted in Akelos, CakePHP, PHP |

Blog-side Akelosにしました

この記事を読んでしまったおかげで
CakePHPへの「あの配列地獄はなんなんとかならんのか」という違和感が不満へと変わってしまった

ということでAkelosに入門することにしてみる。

前書き

XAMPPでAkelosのテスト
・ユーザの管理をする
・ユーザにはそれぞれ管理者レベルみたいな属性がつく
こんなのを作りたいと思います。

ファイルを配置する

http://www.akelos.org/download
から最新版をダウンロード(0.8)
subversionからのインストールを薦めているけど、僕の環境ではなぜかチェックアウトが出来なかった。

今回はドキュメントルートの下にbasicというフォルダを作ってそこにそのまま配置した。
0.PNG

データベースを用意

あらかじめ3つのデータベースを作っておく、本番用、開発用、テスト用(ユニットテスト)
SQLiteが使えないXAMPPのPHP4なのでMySQLを使います。

CREATE DATABASE `basic` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `basic_dev` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `basic_tests` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

インストール

http://localhost/basic/
にアクセスしてインストーラを起動、
1.PNG
・DBの設定を入力
・言語の設定(関係ないかもしれないけどjaをenより前に移動した)
2.PNG

マイグレーションファイルを作成

RoRを使っていれば知っていると思うのですが、データベースのテーブルを作ったり、カラムを追加したりっていう作業ははマイグレーションという仕組みで管理します。
便利というよりは、この仕組みを使うことでスキーマの変更を必ずファイルに記録するようになるってのが個人的には嬉しいです。

app/installers/basic_installer.php

<?php

class BasicInstaller extends AkInstaller
{
 function up_1(){

     $this->createTable('users',
        'id,'.
        'email,'.
        'password,'.
        'authority_id,'.
        'is_active'
    );

     $this->createTable('authorities',
        'id,'.
        'level,'.
        'desctiption'
        );
 }

 function down_1(){
     $this->dropTables('users','authorities');
 }
}

?>

こんなファイルを作ります。
up(次)とdown(前)の状態を記述することでデータベースのスキーマをバージョン管理できます。
さっそくupさせてみましょう

C:\xampp\htdocs\basic>php script/migrate Basic install

するとデータベースにusersとauthoritiesというテーブルが作成されています。
3.PNG

scaffold

C:\xampp\htdocs\basic>php script/generate scaffold user
C:\xampp\htdocs\basic>php script/generate scaffold authority

4.PNG
これで
http://localhost/basic/user/

http://localhost/basic/authority/
に一覧・追加・編集・削除・詳細表示ができる画面ができあがっています。
CakePHPでいうbakeですね。

リレーション

users.authority_idとauthorities.idを連携させます。
まず、モデルの設定から
model/user.php

<?php

class User extends ActiveRecord
{
	var $belongs_to = 'authority';
}

?>

model/authority.php

<?php

class Authority extends ActiveRecord
{
	var $has_many = 'users';
}

?>

user”s”って複数形になっているのに注意

次はコントローラー
controllers/user_controller.php

<?php

class UserController extends ApplicationController
{
	var $models = 'user, authority';

    function show()
    {
        $this->user = $this->User->find(@$this->params['id'], array('include' => 'authority'));
    }

最後に入力フォーム
views/user/_form.tpl

<?php  echo $active_record_helper->error_messages_for('user');?>

    <p>
        <label for="user_email">_{Email}</label><br />
        <?php  echo $active_record_helper->input('user', 'email')?>
    </p>

    <p>
        <label for="user_password">_{Password}</label><br />
        <?php  echo $active_record_helper->input('user', 'password')?>
    </p>
    <p>
        <label for="authority">_{Authority}</label><br />
        <?=$form_options_helper->select('user', 'authority_id', $Authority->collect($Authority->find(), 'level', 'id'));?>
    </p>
    <p>
        <label for="user_is_active">_{Is active}</label><br />
        <?php  echo $active_record_helper->input('user', 'is_active')?>
    </p>

こんなんで連携してくれるようになる
5.PNG

CakePHPとの違い

・コントローラー名は複数形(users)だがURLは単数形になる
・has_manyのときは相手を複数形の名前で指定する必要があってはまった

次回は

本当にRoRと似てるなーと大枠をつかめたので次回はユーザ認証を作ってみたいと思います。

One Response to “CakePHPからAkelosに入門”

  1. [...] CakePHPからAkelosに入門 [...]

Leave a Reply