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

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

Akelos

symfonyで言うところの"forward()"的なメソッドについて

symfonyではforward()とredirect()は厳密に区別されます。redirect()はHTTP 302 + Locationヘッダーを送信しますが、forward()は内部的にアクションメソッドをdispatchさせます。またそれに伴い、Viewもdispatchされた先のアクションメソッドに従います。Ake…

Controllerで使ってはいけないAction名について

またまたまた嵌りました。 "process"というアクションを作ったのですが、そのControllerの"index"アクションを呼ぶと、なぜかその中で使っているモデルについて [13-Mar-2008 13:28:02] PHP Fatal error: Class foobar: Cannot inherit from undefined class…

Controllerにある種のPHP文法エラーがあると、画面が真っ白でログにも何も出ない。

また嵌りました。PHP5で書いたスクリプトを事情によりPHP4のAkelosに移してて、そこで、Controllerに、PHP5でのクラス変数を使っている部分を残してました。

ApplicationControllerクラスと、その派生クラスの両方でそれぞれFilterを追加したい場合のTips

Akelosの各Controllerで共通となる基底クラス、ApplicationControllerでAというFilterを例えばbeforeFilter()で追加していたとします。で、ある一つのControllerでだけ、さらにBというFilterを追加したいとします。 app/application_controller.php : before…

AkelosのPHPテンプレートのセキュリティチェックを回避するには

Akelosで、PHPテンプレート中で自前のクラスのメソッドを呼んだり、いろいろPHPコードを埋め込み始めると次のようなエラーに出くわします。 テンプレート ...../foo.tpl セキュリティエラー: ・テンプレート内で次のような 変数 を使用できません: $_ce ・テ…

display_errorsが勝手にOnになるのを防ぐには

小ネタ。trigger_errorの簡易ラッパ、dlog()の覚え書き。 - ぐらめぬ・ぜぷつぇんのはてダ でも紹介しているdlog()を、公私ともにばりばり使ってるんですが、Akelosでこれやると、ブラウザ画面にも出ちゃいます。 原因は単純で、 app/config/environments/de…

コントローラでの処理に応じて、Viewを切り替えたい場合

なんかrender関係はそれなりに書いてるので、ひょっとしたら中身がかぶってるかもしれませんが、記事のタイトル的にビッコンバッコンなものが見あたらなかったので、ちゃんと書いておきます。Mojavi系・・・というか、ポストMojaviなFW系は、controllerに相…

順番間違えた。

最初にRoRやって、それからAkelosやるべきだった。 RoRでのやり方を知らないので、かなり辛い。 多分RoRを知ってれば、APIマニュアルとか関数名見ただけである程度「あーこーすりゃいーのね。」と見当もつくのだろうけど、その辺のバックグラウンドが無いの…

どうしてもActiveRecordのモデルを使わずにADODBを直で取り出したいときのAk::db()メソッド

Ak::import()でモデルをrequireし、あとはモデルの中で getConnection() でADODBの接続インスタンスを取り出すのが普通だと思います。しかし、それでもモデルを使いたくない。・・・モデルクラスをgenerateするのすら厭だという粋な方向けに、Ak::db()メソッ…

AkActionController#redirectTo()メソッドと、Viewのrendering処理について

あるURLにリダイレクトさせたい場合(Akelosの場合はデフォルトでHTTP 302 でLocationヘッダーを送出)、AkActionController#redirectTo()メソッドを使います。 ところで、redirectTo()を呼んだ後、Viewのrendering処理は発生するのでしょうか?確かにブラウザ…

ActiveRecordのモデル(Model)クラスで、テーブル名を手動で調整したいとき($_tableNameメンバ変数)

えっと、Akelosのmodelのgeneratorは特にDBとか多分、見てないです。ですので、table名などは基本的にクラス名それ自体から生成している・・・筈です。すみません、AkActiveRecordのソース追ってみたのですが、正直追い切れませんでした。 getClassForDataba…

リクエストMETHODを知りたい時など。

AkActionControllerには $Request という名前のメンバ変数でそのものズバリ、AkRequestクラスのインスタンスが入っています。 で、AkRequestクラス経由でリクエストMETHODとかを知ることが出来ます。AkRequest#getMethod() でリクエストMETHODを文字列で受け…

Fatal error: Cannot redeclare class pager in ... vendor/pear/HTML/Pager/Pager.php on line 53

Akelosはデフォでvendor/以下にPEARやADODBなどのライブラリファイルを保持してます。 まぁ、これがシステム側に入っているのと干渉・衝突すると、お題のようなエラーが発生します。 例えばうっかり require_once('Pager.php');とかしちゃうと、システムのPE…

Helperをvimで編集してると、swapファイル(.swp)が取り込まれて表示される。

なんだ、こりゃ。 時々出てて、「なにこれ〜〜???」と。出たり出なかったりしてた。で、よくよく目をこらすと、一番上に「b0VIM」とかある。 ・・・ひょっとして、これvimのswapファイル? 試しにvimを閉じて.swpファイルが無くなると、直った。・・・あ…

ADODBのコネクションを直に触りたいとき

ようやくこの話題に到達できた・・・。そもそも、ADODBのコネクションを直に触り始めたために、他のcontroller間でpartialを共有したり、エラー時にforwardじみた操作をさせたり、という感じでこれまで調査をしてきた訳です。で、長い下準備の割には簡単です…

処理中にエラーが発生した場合、redirectではなくて、symfonyのようにforwardしたい時

Akelosのcontrollerにはforward()相当のメソッドがありません。あえて似ているような機能を実現できるのが、 renderAction() : 指定されたアクションを実行 renderWithLayout() : レイアウトを指定してViewを実行 renderWithoutLayout() : レイアウト無しでV…

あるcontrollerのHelperを他のcontrollerのリクエスト処理中でも使えるよう共有したい場合

後述しますが、Controllerクラスの $helpers や $app_helpers を弄っていないデフォルトのControllerの場合、Akelos自体が提供している全ヘルパー+app/helpers/(コントローラ名)_helper.php のみそのcontrollerが処理するリクエストで使用可能です。 逆に言…

render()でpartialを指定したときに、"Fatal error xxxx に tpl.php, js.tpl, または委譲されたテンプレートがみつかりません。 in ... AkActionView.php"と表示された場合

先日、Helper中からさらにテンプレートを呼び出したいとき - ぐらめぬ・ぜぷつぇんのはてダで、"partial"キーを$optionに指定すれば良い、とまとめました。ところが、$optionには"controller"というキーを指定するパターンもあります。 えーっと、タイトルの…

vendorディレクトリ以下をrequireしたい時

symfony/CakePHP/Akelosとみ〜んな"vendor"ってなってますが、RoR以降の流行なんでしょうか?とまれ、アプリあるいはプロジェクト単位で外部ライブラリや、共通クラスなんかを使いたい場合、大概この中に置くことになると思います。 symfonyの場合は"symfony…

Helper中からさらにテンプレートを呼び出したいとき

流儀としてはHelperの中で、echoとかでHTMLタグをベタ出力するのが流行なんでしょうか?Railsやったこと無いのでよく分かりません。 ともあれ、Helper中からさらにテンプレートを呼び出したいとき・・・なんですが、Akelosの流儀かどうか分からないのですが…

Helper中でコントローラにアクセスしたい時

generatorを使ってcontrollerだけを生成すると、helperも一緒に生成してくれるのは良いのですがAkActionViewHelperを継承してくれません。このため、$this->_controllerが使えないです。例: DOS> php .\script\generate Hoge The following files have been…

Helper中などでModel(ActiveRecord)クラスを手動でrequireしたい時

手動で、特定のモデルを取り込みたい(例えばControllerとは関係のないテーブルのActiveRecordを使いたい)時は、Ak::import()が使えます。引数指定も柔軟で、二つ以上のモデルを取り込みたい(requireした)場合は、配列で見たまんま渡しても良いですし、内部実…

レイアウト中でpartialを使う

こんな感じで。 app/views/layouts/hoge.tpl : render(array('controller' => 'common', 'partial' => 'accountheader')) ?>これで、app/views/common/_accountheader.tpl を取り込めます。普通にcontrollerのview内であれば、'controller'指定は省略できま…

layoutを共通化してみる。

generate scaffold などすると、app/views/layouts/ 以下にコントローラと同じ名前のlayout用ファイルが作成されます。例えば、 $ ./script/generate scaffold Hogeとやると、 app/views/layouts/hoge.tplというlayout用ファイルができあがります。まぁこれ…

CSSファイルを読み込ませるには

AssetTagHelperを使います。AssetTagHelperには他にもimageやjavascriptを読み込ませるためのメソッドがあります。CSSファイルを読んで、linkタグを出力するにはstylesheet_link_tag()を用います。で、Akelosではpublicディレクトリ中にデフォルトで public/…

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

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