ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

Akelosでプロジェクトを作ってみる。

Akelosを始めてみました。WinXP+SP2, PHP4.4.7(8じゃないのは開発機だから)で、PHP4で行けるのか試してみます。
ところで、
http://www.akelos.org/download
↑から0.8をダウンロードしてみたのですが、中に入ってるversion.txtの中には0.7.1とか書いてあるんですけど。

とりあえず始めてみます。

Akelos自体はどこへ置けばよいの?

Akelosは自前でvendorディレクトリ(最近の流行ですかね?この名称)にPEARやらADODBやらsimpletestやらphpmailerやら持ってるわけですが、
さてどこに置けば良いのか?ですが。
どこに置いてもよさそうです。
つまり、php.iniでinclude_path設定が通っていない場所においても問題ないと思います。

といいますのは、AkelosってコードジェネレートタイプのFWで、ジェネレートしてくれた設定ファイル中に、Akelos自体へのフルパス指定がAK_FRAMEWORK_DIRという定数で定義されます。
で、Akelosは内部のrequireとかはこのAK_FRAMEWORK_DIRを使って調整された

  • AK_LIB_DIR
  • AK_CONTRIB_DIR
  • AK_VENDOR_DIR

などを使ってフルパスでライブラリファイルをrequireするようになってますので、結果としてinclude_pathを考えなくて良いようになってます。

じゃぁAkelos自体のフルパス、つまりAK_FRAMEWORK_DIRを弄りたい場合は?ってところですが、これもちゃんとできますので、安心です。
手法は後述しますが、要するにboot.phpをrequireするより前に、AK_FRAMEWORK_DIRを定義してしまえばそちらが使われます。
で、その設定ポイントは大概プロジェクトディレクトリのconfig/config.php(プロジェクト作成直後にsetupを行うか、config/DEFAULT-config.phpをコピーするかして作成したファイル)になります。

というのは先取りになっちゃいますが、順番として
ジェネレートされた公開エントリポイント:index.php

プロジェクトのconfig/config.php

プロジェクトのconfig/boot.php
の順にrequireされていくからです。

ですので、config.phpでAK_FRAMEWORK_DIRを調整すれば、Akelos自体をどこに置こうとNoProblemになるわけです。

今回はC:\work\akelos_0.7.1に解凍してみます。こんな感じになりました。

C:\work\akelos_0.7.1
    app\
    ...
    README.txt
    version.txt

何を見ながら作ればいいの?

それと、Akelos本体のREADME.txtとかを見ながら作るみたいです。
Railsを意識していますので、Railsを弄ったことのある人であれば「ああ、あの機能は多分・・・クラス名とかパッケージ名的にこれだろう」と見当をつけられるかもしれません。
自分はRailsは触っていませんが、symfonyを弄ったことがあるので、まぁおおよそ雰囲気と、APIサイトや実際のコードに体当たりして進めていく感じになります。

プロジェクトを作ってみる。

↑で紹介したドキュメントを見つつですので、「○○にこう書いてあったのでこうします」的なところを書いている余裕は無いかもです。そこだけ含み置きください。

まずプロジェクト用のディレクトリを作ります。Akelosではプロジェクト、というよりは「アプリケーション」と呼ぶのが一つの単位になるっぽいので、以降はこの「アプリケーション」という名称で行きます。
http://www.akelos.org/docs/tutorials/booklink の "Setting up a new Akelos application" に書いてある方法で行きます。今回は C:\work\akelos というディレクトリを用意して、この中に作ってみます。

(c:\work\akelos ディレクトリは作成済み)
DOS> cd c:\work\akelos_0.7.1
DOS> php .\script\setup -d c:\work\akelos
    Creating directory: C:\work\akelos\tmp
    ...
    Linking the application with the framework at C:\work\akelos_0.7.1
    Creating file: C:\work\akelos\index.php
    Creating file: C:\work\akelos\.htaccess

    Please point your browser to C:\work\akelos in order to complete the installation process

tutorialの方では "-p" も指定していますが、これは単に-dで指定したアプリケーションディレクトリの publicフォルダに、公開ディレクトリとしてのシンボリックリンクを張るだけのようです。
が、当然Windowsなので効きません。というわけで、今回は -d だけになっています。

するとこんなディレクトリ構成が作成されています。

C:\work\akelos
    app\
    config\
    docs\
    log\
    public\
    script\
    test\
    tmp\
    .htaccess
    index.php

なんかいきなりindex.phpがあってびびりますが、これはAK_INSECURE_APP_DIRECTORY_LAYOUTをtrueにして、public/index.phpをrequireしているだけのようです。
AK_INSECURE_APP_DIRECTORY_LAYOUT定数がどう影響するかはまだ未調査ですが、constants.phpgrepした感じでは未定義時はfalseになります。
なんとなく用途も想像がつく感じです。public/index.phpの方では特に触っていないので、単純にpublic/ディレクトリをWebでルートとして公開しておけば、AK_INSECURE_APP_DIRECTORY_LAYOUTの影響はひとまずは考えなくて良さそうです。
というか元々Linux系であれば、SymbolicLinkで public/ が公開されるようになるので("-p"オプション)、特にアプリケーションディレクトリ直下のindex.phpは今は考えなくて良いでしょう。

アプリケーションの設定をしてみる。

http://www.akelos.org/docs/tutorials/booklink の"Generating the configuration file"によると、Webブラウザ経由のと、config/DEFAULT-config.phpとconfig/DEFAULT-routes.phpをコピーするのの二種類があるようです。
Webブラウザ経由だと楽そうですが、まぁ、コピペでやってみます。

config.phpの方の設定項目は主に次の4つになります。

  • $database_settings 変数
    • 'production' : まだサポートされてない?
    • 'development' : 普通はこれ?
    • 'testing' : いろいろ値を書き換えるので、developmentやproductionと同じ場所にするなと注意書きコメント。
  • $ftp_settings 変数:symfonyrsyncですが、こちらはFTPなのかな・・・?
  • AK_ENVIRONMENT 定数 : これで、productionかdevelopmentか切り替えるぽいです。で、config.phpの段階で未定義の場合はdevelopmentが定義されるコードになってます。index.phpで先に定義することで上書きできそうですね。
  • AK_FRAMEWORK_DIR 定数 : Akelos本体へのフルパスです。これも、index.phpとかで上書きできそうです。

これらはそんなに難しいところは無いと思います。ただ、DB設定で文字コードの設定が見あたらない・・・と思ったらすでに同様の問題が。

Akelos+mysql4.1以降の組み合わせでデータベースで日本語を扱う場合、mysql文字コードの設定次第で文字化けしする。というかこれはakelosに限った話ではなくて、mysql4.1以降の場合「SET NAMES xxx」を実行しておかないと文字コードが正しく扱われない。

Akelosでmysqlの文字化けをどうにかする - ぬかるむ日々

これは文字化けしてから考えよう。

それはそれで、この段階でブラウザからアクセスしてみます。VirtualHostとかはあらかじめ設定しておきました。

・・・なんか大量の
Warning: Call-time pass-by-reference has been deprecated
が。

工エエェェ(´д`)ェェエエ工工

Warning: Call-time pass-by-reference has been deprecated;と警告が出て実行-できない。

解決方法は httpd.confでphp_flag allow_call_ti-me_pass_referen-ce on もしくは php.iniでallow_ca-ll_time_pass_re-ference=on を設定する。

http://stickstack.org/node/166

しゃーないので、.htaccessに↑の設定を追加。

それでどうにか「ようこそ」画面が表示されました。が・・・なんか、Akelosのロゴが表示されてない。
見てみると、アプリケーションディレクトリのapp/views/layouts/page.tpl

background: #fff url('<?=$asset_tag_helper->image_path('akelos_framework_logo')?>') 10px 10px no-repeat;

という記述が・・・!!ちょwこれshort_open_tags Onじゃないと動かないじゃん。
というわけで次のように修正。

background: #fff url('<?php echo $asset_tag_helper->image_path('akelos_framework_logo') ?>') 10px 10px no-repeat;

これで、Akelosのロゴが表示される「ようこそ」ページがようやく表示されました。

で、以降ではboot.phpに基づいてAkelos関係のディレクトリを次のように略記します。

さて、やってみますか・・・。