Akelos PHP Framework

Ruby on Railsの完全コピーを目指しているPHPフレームワーク。


サンプル


初心者メモ

ファイルレイアウト

root
|-- app                                アプリケーション固有処理
|   |-- apis
|   |-- controllers                    コントローラ
|   |   |-- page                       デフォルトコントローラ
|   |-- filters
|   |-- helpers                        viewで使うヘルパ
|   |-- installers                     マイグレーションファイル(環境構築)
|   |   `-- versions
|   |-- locales                        言語ファイル(画面の出力メッセージ等)
|   |   |-- helpers
|   |   |   `-- active_record          ActiveRecordを使ったエラーメッセージ等
|   |-- models                         モデル
|   |-- vendor
|   |   |-- behaviours
|   |   `-- plugins
|   `-- views                          ビュー
|       |-- layouts                    レイアウト(共通して使う画面デザイン)
|       |-- page                       デフォルトビュー
|-- config                             設定ファイル
|   |-- environments                   開発、本番、テスト環境に分けた設定ファイル
|   `-- locales
|-- docs
|   `-- images
|-- log                                ログ
|-- public                             ドキュメントルート
|   |-- images                         デフォルト画像
|   |-- javascripts                    デフォルトJavaScript
|   `-- stylesheets                    デフォルトCSS
|-- script                             Akelosフレームワークのコマンド群
|-- test                               ユニットテストファイル
`-- tmp                                テンポラリ

型変換を忘れずに

integer型に代入する際に、ゼロが入らずにnullになる時がある。フォーム等で0を入力した場合、文字列型になるので明示的に数値型に直す必要がある。

OK : 0
NG : '0'

よって、モデルのvalidate()、beforeCreate()、beforeUpdate()等で、intval()等を使って型変換してやる。

ActiveRecordのトランザクション

DBを直接扱う場合とメソッドが違う。

$model = new ModelName(); // ActiveRecordを継承したモデル
$model->transactionStart(); // begin
$model->update(...); // 処理
$model->transactionFail(); // rollback
echo $model->transactionHasFailed(); // rollbackしたら1
$model->transactionComplete(); // commit

DBを直接扱う

コントローラから使える変数

デフォルトテンプレートの変更

通常はアクション名を同じテンプレート(アクション名.tpl)が呼ばれるが、任意に指定したい時。

renderPartial

検索とページャ

json(日本語可)

xml (キーが日本語だとAk::xml_to_array()で空配列になる)

$data = array('key1' => 'var1', 'key2'=>'var2');
$xml = Ak::array_to_xml($data)
Ak::xml_to_array($xml)

公開ディレクトリのファイル指定

public/images
public/javascripts
public/stylesheets

view でパラメータの取得

viewからはコントローラのメンバ変数は直接アクセスできる

index() -> foo()へのルーティング

class HogeController
{
	function index()
	{
		// foo()メソッドが実行され、foo.tplが呼び出される。
               // 'controller'=>'hoge' も追加できる
		$this->redirectTo(array('action' => 'foo'));
	}
	
	function foo()
	{
	}
}

flash, flash_now

TOPからのURL (viewで扱う場合は、helper経由)

echo AK_ASSET_URL_PREFIX;
  => /hoge 

svnで無視すべきファイル

$ svn propedit svn:ignore project_name/log
----
*.log
----

$ svn propedit svn:ignore project_name/tmp
----
*
----

外部から呼び出されたくないコントローラのメソッドは、頭に「_(アンダースコア)」を付ける。

_hoge(){}

設定ファイル

config
|-- boot.php              初回処理
|-- config.php            共通設定
|-- environments
|   |-- development.php   開発時設定
|   |-- production.php    本番時設定
|   `-- testing.php       テスト時設定
|-- locales               多言語
|   `-- ja.php
`-- routes.php            URLルーティング

console, generate, migrate, pluginコマンドで、config.phpで設定した環境が反映されない。

常に'development'で動作する模様。フレームワーク側の不具合。config.phpを読んだ後に、定義するように変更してやる。
「console, generate, migrate, plugin」に対して編集する。

Index: script/console
===================================================================
--- script/console      (リビジョン 79)
+++ script/console      (リビジョン 211)
@@ -5,8 +5,8 @@
 
 define('AK_CONSOLE_MODE', true);
 define('AK_ENABLE_AKELOS_ARGS', true); 
+include(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
 defined('AK_ENVIRONMENT') ? null : define('AK_ENVIRONMENT', 'development');
-include(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
 require_once(AK_LIB_DIR.DS.'utils'.DS.'scripts'.DS.'console.php');
 

date_selectでデフォルト値を設定できるようにする。

デフォルト値を設定するには、コントローラのメンバ変数に同じ名称のオブジェクトが必要なようだ。オプションでの設定ができない。

フォームの値にゼロを入れるを空欄になる

--- lib/AkActionView/helpers/form_helper.php    (リビジョン 86)
+++ lib/AkActionView/helpers/form_helper.php    (作業コピー)
@@ -335,7 +335,7 @@
         }
         $options['type'] = $field_type;
         if($field_type != 'file'){
-            $options['value'] = !empty($options['value']) ? $options['value'] : $this->value_before_type_cast();
+            $options['value'] = isset($options['value']) ? $options['value'] : $this->value_before_type_cast();
         }
         $this->add_default_name_and_id($options);
         return TagHelper::tag('input', $options);


migrateで任意の関数を実行

editamのソースより


NOTICE, WARNING, ERRORログが出力されない

ソースを読むと、AK_LOG_{エラーモード}で、AK_MODE_FILE(0x04)ビットが立っていないと有効にならない。
しかし、Ak.phpで「define('AK_LOG_NOTICE', 0);」になっているため、3つのエラーモードが出力されないようだ。
よって、コメントアウトすれば出力されるようになる。
他の箇所でも特に使っていないようだし、不具合なのか意図があるのか不明だ。

$logger = Ak::getLogger();
$logger->debug('...');		// OK
$logger->info('...');		// OK
$logger->message('...');	// OK
$logger->notice('...');	// NG
$logger->warning('...');	// NG
$logger->error('...');		// NG
$logger->critical('...');	// OK

PHP5.2.0未満+PostgreSQLでデータが更新されない

PHP5.2.0でpg_escape_string()の引数が一つ追加されたが、Akelosはマイナーバージョンは見てないので、5.2.0未満でも新しい関数を使おうとして失敗している模様。


その他不具合


資料/リンク

Akelos製


その他


コメント

コメントはありません。 Comments/Memo/Akelos

お名前: 「かくにん」を漢字で入力して下さい。1文字目が「たしかめる」で2文字目が「みとめる」です。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:37