![]() Memo/Akeloshttps://dexlab.net:443/pukiwiki/index.php?Memo/Akelos |
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を読んだ後に、定義するように変更してやる。 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)ビットが立っていないと有効にならない。 $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? |
|