ログ日記

作業ログと日記とメモ

PHP

テンプレートエンジンを使うのをやめたい

PHP

BladeOneをアップデートしたら、include時の変数割り当てのフローが変わったのか、既存変数が上書きされてエラーが出るようになってしまった。 本家Bladeではこういったことは起きない? 仕方がないのでバージョン固定した。ソースを追っても何となく不毛な…

PHPStanのextensionでnamespace・class名の依存関係チェックする

前に書いた記事 DDDのさわりをやろうとした - ログ日記 ここで作ろうと思っていた拡張を作った。 github.comサンプル。 https://github.com/nishimura/phpstan-namespace-dependency-sample 実際に作ってみると、各レイヤーごとの依存関係の認識が曖昧なこと…

PHPの開発環境とライブラリと振り返りと近況

昔のコードを触る機会があった。 PHPの自作フレームワーク現状まとめ - ログ日記 この辺のやつ。 もう7年も前か…。当時はテンプレートエンジンに変数を渡す場合、アクションコントローラーでメソッドを呼び出すのが流行っていた。 set('foo', 1); } } や foo…

プログラムの分け方とディレクトリ構造

最近、プログラムのディレクトリレイアウトというかファイルを置く場所を変えようと試みている。 旧来のMVC的な構造だと、ControllerやModelのディレクトリを分ける、レイヤーごとにまとめる、という感じになると思う。 商品情報表示画面、その管理画面、CSV…

PHPStan バージョン0.12.24から PDOStatementが Traversable でなくなってしまった件

ジェネリクスの実装が @implements Traversable<array<int|string, mixed>>で固定されるようになった。FETCH_CLASSとジェネリクスを組み合わせていい感じにマッピングする方法が使えなくなって、ちょっとめんどくなってしまった。 都度 @var が必要になる。一応報告しておいたけど。 h</array<int|string,>…

DDDのさわりをやろうとした

PHP

ちょっと一部だけ複雑なプログラムがあったので、PHPでDDDっぽいオブジェクト指向をやろうとした。 なかなか大変だった。 まず静的解析による型チェックは必須。 型が自動でチェックされないDDDは、適当に書き捨てたプログラムより分かりにくくなると思った…

PHPStan が早い

PHPStanのデフォルトのルールを変更したくて、どうすれば良いか分からなかった。 デフォルトの config.neon を変更する方法を教えてってissueに書いたら10分後に返信来た。 scopeClassを変更すればgetType()で何でもできるよ、でも全体で一つの拡張しか使え…

フラッシュセッションにハマる

PHP

前にも同じ問題でハマったのに忘れていて再びハマったメモ。 リダイレクト前にセッションに値を保存して、リダイレクト後のページで取り出して、削除するような一度だけ使うセッション変数にはフラッシュセッションを使う。 セッション系ライブラリには大抵 …

スタートアップがPHPを使っていると聞いた話

PHP

この前、外国のスタートアップをやっている人にサービスを見せてもらった。 Qiitaによく書かれているような新しめのフロントエンドの技術盛り沢山で、クラウドや聞いたことのないようなサービスからTrelloのような知っているサービスなど色々使いつつ、なん…

php-modeとyasnippetを更新した

最近の無名関数が綺麗にインデントされるようにemacsのphp-modeを更新した。 https://github.com/ejmr/php-mode.git これをcloneして使っていたのでpullしただけ。 Emacs23だとうまくいかなかったのでEmacs24に更新。 apt-get install -t wheezy-backports e…

Composerの検索をローカルにする

PHP

いつも忘れるのでメモ。 あらかじめ外部ライブラリはローカルにgit cloneしておく。 composer.json "repositories": [ {"type": "vcs", "url": "/home/user/repo/my-framework"}, {"type": "vcs", "url": "/home/user/repo/my-lib"}, {"type": "vcs", "url":…

今更PHPでモナド的なものを書く

PHP

http://blog.dakatsuka.jp/2013/09/03/php-maybe-monad.html この辺とか http://d.hatena.ne.jp/kazu-yamamoto/20110413/1302683869 この辺とか見てたらちょっとやってみたくなったので。 ○○言語でMonad実装って結構あるけど、MonadPlus使えないとあまり意味…

ぼんやり振り返り

顧客は本当に欲しいものは知らない、と言うけれど同じような症状だ。 かゆいところに手が届かない。 自作フレームワークがつぎはぎになってきたのでカッとなって作ったやつ。 PHPの小規模用テンプレートエンジンを作った - より良い環境を求めて なんかアノ…

流れるようなインターフェースをtraitで

PHP

ぼんやり思ったことのメモ。 たとえばDB接続なら from('item') ->join('category') ->on()->over(['category.status' => 'item.status']) ->like(['name' => 'my item']) ->order('code') ->offset(100) ->limit(10) ->get(); とかやりたい。 今までさくっと…

Debian wheezyにphpenvでPHP複数バージョンの共存

かなりハマったのでメモ。 基本は http://qiita.com/uchiko/items/5f1843d3d848de619fdf こちらを参考に、一般ユーザー権限で操作する。 git clone https://github.com/CHH/phpenv.git phpenv/bin/phpenv-install.sh mkdir ~/.phpenv/plugins cd ~/.phpenv/p…

PHPの自作フレームワーク現状まとめ

https://github.com/nishimura/laiz2 基本方針 DB設計最優先 HTML構造優先 コード量を少なく 大抵の処理はPage(Action)クラスに書く。いわゆるAction肥大化。もし「この二つのテーブルは大抵joinして取得している」という状況になったらModelを作っても良い…

テンプレートエンジンにフォーム値の設定機能を付けた

PHP

https://github.com/nishimura/laiz-templateこれでデザイナーから大量のinput type="checkbox"が入ったHTMLを渡されても、正規表現置換で一瞬で対応できる。 簡単なマニュアル書いた。 if文 hasError変数がtrueの時(if ($hasError))だけタグ内を表示します…

Zend\Di の依存関係ループを解消する

勘違いしていたので追記SessionManager は 複数扱えないので、セッションを複数持つ場合は以下のようにして名前空間だけ分ける。 storage = $storage; } } class SessionManager{ public function __construct(SessionAdapter $adapter){ $this->adapt…

'Invalid instantiator of type "NULL" for "Zend\\ServiceManager\\ServiceLocatorInterface".

Zend\ValidatorPluginManager や Zend\Filter\FilterPluginManager などの PluginManager系をDIで取ろうとするとエラーになる。 同じ問題をやっている方が居た。 http://d.hatena.ne.jp/noopable/20130304 ここを詳しく読む前にやったので、全然別の方向から…

Zend\Di でコンストラクタインジェクションをチェーンするのは面倒くさい

一般ユーザー用画面と管理者画面があるとする。この二つで別々のセッション管理をしたい。 その場合、ここにあるようにaliasを設定すれば一応できる。 addAlias('dbadapter-readonly', 'MyLibrary\DbAdapter', array( 'username' => $config->db->readAdapte…

PHPのフレームワークを作った

ソースはここ: https://github.com/nishimura/laiz2composerの使い方を見るのも兼ねてサンプルアプリを置いたのですぐにインストールできるはず。 https://github.com/nishimura/laiz-sample-task composer.phar create-project laiz/laiz-sample-task laiz-…

yasnippet の php-mode を更新した

https://github.com/nishimura/minimal-yasnippet-php-mode今更ながらPHP5.3 の namespace に対応した。

Zend Framework の一部を使おうとしてハマった

PHP

症状は、composer.phar で zendframework/zend-validator を入れようとすると zendframework全体がインストールされる。 原因は、zendframeworkのcomposer.jsonが良くないっぽい。 依存関係を追っていくと、どうもzendframework/zend-i18nを入れようとすると…

PHPのフレームワーク再考

PHPのフレームワークを考えている。 2006年からLaizを作り始めたわけだけれど、普通に利用する機能と実験的機能がごちゃ混ぜでフレームワークが肥大化している。 特に、PHP5.3用に変更したときにPHP4のコードをそのまま持ってきたり新しい仕組みを取り入れた…

PHPで内部用ストリームAPI

PHP

内部用のAPIを作ろうと思ったときに、データが多い場合のことを考えると面倒だったりする。 offsetでページ切り替えするか?とか。 で、基本に返ってストリームから少しずつデータを取得すればいいんじゃないか、というC言語の初歩的なやつをPHPで。 put.php …

PHPはリソースを解放しない方が良い?

PHP

今更ながら、目から鱗。 明示的にリソースを解放しない場合はHTTPコネクション切断後、つまり リクエストシャットダウン時に解放されます。 明示的にリソースを解放した場合、HTTPコネクションがある状態、つま りユーザーにページを送っている最中にリソー…

PHP5用のORM作った その2

PHP

昨日 *1 の続き。 https://github.com/nishimura/Tsukiyo Joinの条件指定が欲しい、or検索が欲しい、テーブル名指定のjoinが欲しい、ということで機能追加。ほぼS2JDBC。 段々コードが見づらくなってきたかも。 OR検索 orやandが予約後なので、苦肉の策で変…

PHP5用のORM作った

PHP

O/Rマッピングライブラリを自作した。 ずっと前から自作ORMを作り替えたいと思っていて *1 、S2JDBCのようなものが作りたいからどうせならJavaやるかと思ってJavaをやり始め、やっぱりJavaよりPHPがいいと思ってPHPに戻ってきて、そうしたらまたORMに不満が…

PHPの小規模用テンプレートエンジンを作った

今までPHPで何かを作るときはLaizを使っていたわけだけれども、レンタルサーバー的な構成だと使いづらい。 数ページのフォームとかだとPATH_INFOに対応するためにApache設定ファイルにAliasMatchを書いたりフレームワーク設定ファイルを書いたりするのが面倒…

いろんなPHP Webフレームワークで同じ画面を作ってみる (Laiz編)

PHP

元ネタはJavaなのでGWTでやろうと思ったけど画面遷移がないのでRPCを使ったとしてもうまく仕様に合わせられない。MVPで途中まで書いたがイマイチに終わり…代わりにPHPで。 仕様はこれ。 足し算プログラム 計算結果は、別画面に遷移し出力する。 submit時にリ…