より良い環境を求めて このページをアンテナに追加 RSSフィード

2015-07-28

[][] ぼんやり振り返り

顧客は本当に欲しいものは知らない、と言うけれど同じような症状だ。

かゆいところに手が届かない。



自作フレームワークがつぎはぎになってきたのでカッとなって作ったやつ。

PHPの小規模用テンプレートエンジンを作った - より良い環境を求めて


なんかアノテーションマイブームだったっぽい。

PHPのフレームワークを作った - より良い環境を求めて

ただ利用しているZendのアノテーション解析が、あるバージョンでとても遅くなったので、アノテーションを使うことに不安を覚える。

言語レベルでやることをPHPで頑張ってやるべきじゃないな、などと思い直す。

@varアノテーションによるリクエスト変数のcastは結構便利だったんだけど。



ふと、Haskellっぽく書きたいよなー、前にそういうこと書いたよなーと思い出す。

バリデーターあれこれ - より良い環境を求めて

やっぱり書いてた。

ロジックの中の方でDBを呼び出すのは良くないよね、という話。


バリデーター繋がりで、Scalaでも何か書いてたなーと思い出す。

LiftでWebアプリ(4): フォーム用共通処理を作る 1 - より良い環境を求めて

この投稿の最後の方のコード、今見てもこんな風に書きたいなーと思える。

演算子が定義できないとどうしようもない…かな?


例えば、こんなの。

<?php
class SomePage{
  public function somePost(Request $req, Db $db){
    $form = $req->fragment('form1');
    $form->key('mail')->name('メールアドレス')
      ->trim()->required('{name}を入力してください')
      ->email('{name}の形式{input}が正しくありません');
    $form->key('body')->required('本文を入力してください')
      ->maxLength(1000, '{param0}文字以上は送信できません');
    $form->key('zip1')->key('zip2')->name('郵便番号')
      ->toHalf()->required('{name}を入力してください')
      ->length([3, 4])->numeric('{name}の形式が正しくありません');

    try {
      $values = $form->get();
      $account = $db->from('Account')->eq(['mail' => $values->mail])->getOne();
      ....
    }catch (IoException $e){
      $errors = $e->getErrors();
      ....
    }
  }
}

万能RequestクラスをTraitの寄せ集めで作って、Eitherの変わりに例外にして…。うーん…。

やっぱり演算子や結合がないとタイプ量が多い。


で、PSR-7もあるのでどうしようとか。



アプリは、Input => App => Output っていうのは確定で、これは

Request => App => Response に置き換えるとちょっとまずい。Outputがそのまま次のInputになった方がシンプルになりそう。

正確には Context & Request => App => Request | Response かなあ。

アプリがRequestを返したらリダイレクトなどをして、Responseを返したら終了。

いや、でもテンプレートエンジンを使うだろうしやっぱりResponseを返すのは特殊な場合だけになるのか。





まとまらないけど眠いので一旦投稿。