moony

Moony 0.10.1リリース

バグフィックスを含むリリースです。ダウンロードはSourceForge.jpからどうぞ。 変更メモ: validationエラー時に表示するテンプレートをアクションクラスのvalidateメソッド内で明示的に設定しなければいけないように変更(戻るボタン使用時に発生する遷移バ…

validationの設定/記述について

$validator->set(MOONY_VALIDATE_REQUIRED, 'name', '名前は必ず入力してください');を $validator->setRequired('name', '名前は必ず入力してください');のように書けた方が便利だろうな。次のバージョンで実装しようか。

Flash変数の扱いを見直し中

急遽実装してリリースに入れてしまったMoony_Flashの実装、0.10.1に向けて見直し中。 現状(0.10.0)のメソッド構成 前のアクションから渡された値を取得する: get 前のアクションから値が渡されたかどうか調べる: exists 次のアクションに渡す値を設定する:…

Flash変数の仕組みを実装してみる

急遽Flash変数の仕組みを実装することにしましたよ。Ruby on Railsやその影響を受けたフレームワーク(Biscuitとか)を見ていると便利そうなので。 新規クラス追加: Moony_Flash アクションクラスの'flash'という名称のインスタンス変数にインジェクションさ…

0.10.xのリリース時期について

validationの方向性も決まったので、5月中にはMoony 0.10.0がリリースできると思います。残っている作業はSmartyのプラグインの実装見直しぐらいかな。フォームのエレメントを置換するやつ。

validationの簡略化

思いっきり簡略化することにした。アクションクラスにvalidateメソッドを作って、引数としてMoony_Validatorのインスタンスを受け取るところまでは同じ。ただし、validateメソッドはbool値を戻す必要がなくなる。Moony_Validatorに検証パターンを登録して、…

Escaping Output

Symfony 0.6.2でEscaping Outputの機能が実装されたようですが、設定をきちんと行わなくてはならない模様。それは面倒な気がする…。 Moonyを使用する場合、テンプレートに値を設定する場合は通常Moony_Responseクラスのsetメソッドを使います。3番目の引数が…

validateメソッド

アクションクラスのvalidateメソッド 引数としてMoony_Validatorのインスタンスが渡される 一通りの検証用メソッドを持っている 検証用メソッドを実行することでエラーメッセージ設定可能 エラー時には前回画面表示時に使用したテンプレートが使用される 変…

Moony_DB

Moony_DBは同梱し続けることに決定。 PEAR::DBのラッパークラス queryメソッドで検索が可能、結果は連想配列の配列 executeメソッドで更新が可能、結果は影響を与えたレコード件数 勿論、これもインジェクションすることが可能。 [Injections] db=Moony_DB上…

Moony_Requestの実装方式

リクエストパラメータの取り扱い、最終決定。 結局0.9.xまでと同じようにgetメソッド経由でアクセスするようにしましたよ。その方が何かと便利なので…ということで元の実装に回帰。ただし、Moony_Requestのインスタンスはメソッドの引数としてではなくアクシ…

Smartyを直接操作

Smartyを使用する場合は、細かいことを使用としたらSmartyの設定ができないと困ることになります。現状ではよく使うであろう設定をmaple.inc.ini内で定数として保持しています。が、これだと準備された設定しかできないことになります。 Mapleに限らず、Smar…

アクションごとのインジェクション

アクションごとにインジェクションしたい場合は、アクションクラスを配置したディレクトリのmoony.iniにインジェクション定義を全部書いておいて、必要なものだけアクションのインスタンス変数とすればOK。 たとえば、moony.iniが以下のようになっていて、 […

インジェクション設定ファイル

diconファイルほど大げさではないんだけれども、インジェクションの設定をiniファイルで定義できるようにしようと思う。Moony.phpと同じ階層にあるmoony.iniがまずベースとしてロードされて、それをアクションクラスを配置するディレクトリのmoony.iniが上書…

フレームワーク一覧

http://d.hatena.ne.jp/koyhoge/20060327/1143444511 id:koyhogeさんがまとめているフレームワーク一覧にMoonyが追加されていました。Moonyの指摘をしてくださったid:elfさん、ありがとうございます。精進いたします…。それにしてもたくさんあるなw

リクエストパラメータの扱い

アクションクラスのインスタンス変数にリクエストパラメータをインジェクションしようと思ってたけど、そうするとリクエストパラメータの数が多いときに非常にわかりづらく/見づらくなる。どうしたものか。Moony_Requestクラスはやっぱり必要だろうか…。std…

Moonyの立ち位置とは?

メモみたいなものだけれど、最近考えていること。 フレームワークとしてのPHP リクエスト/レスポンスの取り扱い セッションの取り扱い 多種多様な関数群 PHPにできることはPHPに任せてしまおう PHPで"自動的に"できないことは? セキュリティ対策 きちんと…

XMLなどを出力する方法

テンプレート描画を無効にして、echoやprintを使って文字列を出力すればプレーンなテキストが出力可能。Content-Typeがtext/plainの場合はヘッダ出力を省略可能(デフォルトで出力)。エンコーディングは必要に応じて変換すること。 class Foo { var $templa…

テンプレート描画を無効にする方法(2)

やっぱりもっと簡潔に、インジェクションされたテンプレートファイル名にNULLを設定すればテンプレートのレンダリングを行わないようにする。その方がわかりやすい、と思う…。 class Foo { var $template; // to be injected function execute() { $this->te…

テンプレート描画を無効にする方法

Moony 0.10.xではSmartyを用いたテンプレートのレンダリングを無効にするためのメソッド、Moony_Helper::disableRenderingを提供予定。下記のように実装することでexecuteメソッド終了後のテンプレート描画が抑制できる。 class Foo { var $helper; // to be…

外部ライブラリとか自作ライブラリとか

Moony 0.10.xでは以下のクラスが廃止される。 Moony_DB (PEAR::DBのラッパー) Moony_Uploader (ファイルアップロード用クラス) その他のクラスに関しては、他のクラスと統合するなどして機能自体は存続する予定。 上記2クラスをどうして廃止するかというと、…

PATH_INFOの取得方法

PATH_IFNOの取得方法も変更しようと思う。例えば、URLが/index.php/foo/bar/param1/param2の場合: Moony 0.9.x Moony_Request::getPathInfo($index)で取得 class FooBarAction extends Moony_Action { function execute($request, $response) { $p1 = $reque…

Ejection

Injectionの対義語は、Ejectionでいいのかな? つまり、何かを注入するのではなくて抽出するといったような意味。注入できる依存性/変数があるのなら、抽出できる(抜き出すことができる)依存性/変数もあるということ。密結合になると言えばそうだけど、…

validator実装案

Moony 0.10.0のvalidatorの実装について、シンプルに以下のような実装を考えている。 アクションクラスにvalidateメソッドが存在する場合、filterより後、executより前にメソッドが実行される。 validateメソッドは、引数として連想配列の参照を受け取る。こ…

validatorは必要か

大掛かりな仕組みとしてのvalidation機能は必要ないような気がしてきた。そもそもvalidationの機能としては3つあると思う: 入力値の検証を行うことができること できるだけ定型的な方法で機械的に検証できることが望ましい 検証エラーの場合に入力画面に戻る…

0.10.0のインジェクション

大体以下のようなインジェクションを考えている…。 例えば、アクションクラス'Foo'を実装するとする。アクションクラスは特定のクラスのサブクラスである必要はない。 class Foo { // リクエストパラメータのインジェクション var $name; var $name_kana; //…

もっとシンプルに

0.9.0で大きく構成が変わったMoonyですが、0.10.0(?)でまたもや大きく変わるかもしれません。もっと単純な構成/実装にできる部分が見えてきてしまっているので、その辺を改善したい。 とりあえず頭の中で考えているのは: DI変数インジェクションの部分的な…

0.9.0リリース

Moony 0.9.0をリリースしました。ダウンロードはSourceForge.jpからどうぞ。 主な変更点は以下のとおり: ディレクトリ構成の大幅な変更 validation機能の実装 filter機能の実装 Moony_Routerクラスの新規追加 Moony_Responseクラスの機能強化 「セッションID…

通常のテキスト出力

できるようにしてみる。アクションクラスでMoony_Response::outを実行すればOK。関数名を"output"と迷ったけれど、短く"out"にすることに。 実装例は以下のとおり: class FooAction extends Moony_Action { function execute($request, $response) { // 2番…

配列の値を取得する関数

ただし、該当するキーが存在しない場合は代替値を返す。Moony_Utilsに追加。 function getArrayValue($key, $array, $alt = null) { if (is_array($array) && isset($array[$key])) { return $array[$key]; } return $alt; }PHPの配列関数の引数のほとんどは…

Camel Caseにする関数

Moony_Utilsに追加する。 function camelCase($str, $delim = '_') { if (strlen($delim) == 0) { return ucwords($str); } $words = explode($delim, $str); for ($i = 0; $i < count($words); $i++) { $words[$i] = ucfirst($words[$i]); } return implode…