Akihito Koriyama

Results 24 issues of Akihito Koriyama

## 概要 コンテキストをセットするときにdoctrine/cacheオブジェクトを渡すとキャッシュが行われます。 ```php use Doctrine\Common\Cache\ArrayCache; $cache = new ArrayCache(); $tmpDir = __DIR__ . '/tmp'; Dii::setContext($contextClass, $cache, $tmpDir); ``` ## 効果 以下のコストが節約されます。 * 束縛バリデーション * 対象クラスの解析(引数やメソッドのリフレクション) * 依存グラフの構築 * 全てのアノテーション読み込み...

enhancement

The "nikic/php-parser" dependency is no longer needed in our ## Summary by CodeRabbit - **Chores** - Updated PHP version from 8.1 to 8.3 in workflow configurations. - **Refactor** - Removed...

Compilerの代替です。Injectorを渡すと以下のコンパイルが行われます。 * DIファイル生成 * AOPファイル生成 * メソッドパラメーターのメタ情報のキャッシュ (アノテーションのキャッシュは行われません) ```php $injector = Injector::getInstance(); (new CompileApp())->compile($injector); ``` コンテキスト配列を渡すと他のコンテキストでもDI/AOPファイルの生成が行われます。 ```php (new CompileApp())->compile($injector, ['prod-api-app', 'prod-html-app']); ``` 最初のヘルスチェックに一度だけ行う事を想定しています。 ## 背景 [Compiler](https://github.com/bearsunday/BEAR.Package/blob/1.x/src/Compiler.php)はディプロイ前のCLIでの実行を想定して作成されました。`CompileApp`はCLIとともにwebでのヘルスチェックでも使えるように実行速度を求めてよりコンパクトになったものです。またPHP8アトリビュートの普及によりアノテーションのコンパイルも取り除かれています。

### Bug Report ローカルキャッシュがvar/tmpに作成されず、`sys_get_temp_dir()`に作成される。 ### How to reproduce `composer create-project bear/skeleton -n app`で作成したプロジェクトのIndexに`#[Cacheable]`をつけてリソースリクエストを実行。 ``` use BEAR\RepositoryModule\Annotation\Cacheable; use BEAR\Resource\ResourceObject; #[Cacheable] class Index extends ResourceObject ```

bug

## Pharのための構成 ``` ├── app.phar (アプリケーションとvendorを合成したpharファイル) └── var (動的に生成されるファイル) ├── log └── tmp ``` ## 現在知られているPhar化への問題 現在phar化すると以下の問題が発生することが判明しています。 1. Injector::getInstance()で__DIR__が使われている。(Pharファイルで使うと自身をポイントしてしまう) 1. FileUpdate::getFiles()でsrcフォルダをスキャンんしていてファイルがないのでエラーになってしまう。

feature

インジェクターがキャッシュできない時のエラー表示ができないか検討。 https://github.com/bearsunday/BEAR.Package/blob/4bee3753de0486bbbe850c3d01f057ce8ffd2bf1/src/Injector/PackageInjector.php#L59 ・nullが返ってきた時にはストレージの問題か、値がシリアライズできないかのどちらかが原因。シリアライズ不可の場合にはシリアラズを行った時のエラーメッセージを表示したい。

error message

cliプロジェクトをhtmlで動作させた時にエラーを発生させる 現状では以下のエラーが発生するのみ。 ``` Warning: Undefined array key "argc" in vendor/bear/package/src/Provide/Router/CliRouter.php on line 90 ```

enhancement

# 規約ベースのルーター 現在、BEAR.Sundayにルーターが2つあります。 * 規約ベースのWebRouter * 正規表現ベースのAura.Router WebRouterは高速でルーティング設定ファイルも不要ですが、パスの中にパラメーターを埋め込むことはできません。Aura.Routerは万能ですがルーティングファイルのメンテナンスと、実行コストが必要でDRY原則にも違反しています。(ほとんどのフレームワークが採用している方式です) 新しい規約ベースのルーターが両者のメリットを融合しないかと考えました。 ## BEAR.AutoRouter pmjones氏の[AutoRoute](https://github.com/pmjones/AutoRoute)を用いた`RouterInterface`を実装します。 AutoRoute概要 >AutoRouteはメンテナンスが少なくて済みます。認識された名前空間と認識されたアクションメソッド名で、クラスをソースコードに追加するだけで、自動的にルートとして利用できるようになります。アクションクラスと同期させるために、ルーティングファイルを管理する必要はもうありません。 > > AutoRouteは高速です。実際、FastRouteがキャッシュされたルート定義を使用している場合でも、一般的なケースではFastRouteの約2倍の速度があります。 > > 注意事項 > > 代替品を比較する場合、AutoRouteはAltoRouter、FastRoute、Kleinなどと同じカテゴリーであり、Aura、Laminas、Laravel、Symfonyなどとは別物であるとお考え下さい。 AutoRouteモチベーション > 正規表現(regex)ルーターは一般に、代わりにリフレクションで見つけることができる重要な情報を重複しています。ルートが対象とするアクションメソッドのパラメータを変更する場合、ルートの正規表現自体も変更する必要があります。そのため、正規表現ルータの使用は DRY 原則に反していると考えられます。ルートが数本しかないシステムでは、重複した情報としてルートファイルを管理することはそれほど面倒なことではありません。しかし、ルートが100以上あるシステムでは、ルートと対象のアクションクラスやメソッドを同期させておくことは負担になることがあります。 >同様に、アノテーションベースのルーターはルーティングの指示をコメント内に配置するため、明示的なメソッドのシグネチャにすでに存在する動的パラメータと重複することがよくあります。 >...

feature

## Summary by CodeRabbit - **新機能** - cURLを使用してHTTPリクエストを送信するための新しいクラスとインターフェースが導入されました。 - 特定のHTTPヘッダーでHTML応答をテストする新しいテストメソッドが追加されました。 - **バグ修正** - HTTPリクエストヘッダーのチェックを追加し、'text/html'の場合はHTML内容で応答するように変更しました。 - **リファクタリング** - HTTPリクエストの処理を`HttpRequestInterface`に委任するように`HttpResourceObject`クラスが大幅にリファクタリングされました。 - **その他の変更** - 不要な依存関係を削除し、必要な拡張機能を追加しました。