Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ interface UserRepository
interface UserRepository
{
#[DbQuery('user_stats', type: 'row')]
public function getStats(string $id): array; // ['total' => 10, 'active' => 5]
public function getStats(string $id): ?array; // ['total' => 10, 'active' => 5], or null when no row matches
}
```

Expand Down
22 changes: 11 additions & 11 deletions docs/tutorial/README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ permalink: /tutorial/ja/

ブログサービスを題材に、Ray.MediaQuery 1.1.0 までの主要機能を第0章から第13章+補章で体験する入門。

- 前提: PHP 8.2+ / Composer / SQL の基礎 / DI の概念
- 前提: PHP 8.2+ / Composer / `ext-pdo` / `ext-mbstring` / `ext-tokenizer` / `pdo_sqlite` / SQL の基礎 / DI の概念
- DB: SQLite (`:memory:`) — 追加 DB サーバーは不要

## このチュートリアルの読み方
Expand All @@ -27,7 +27,7 @@ permalink: /tutorial/ja/

書き上がったコードは [`docs/tutorial/src/`](https://github.com/ray-di/Ray.MediaQuery/tree/1.x/docs/tutorial/src) 配下に「答え」として置いてある。詰まったら参照してよい。

> **完成版 `run.php` について**: [`docs/tutorial/src/run.php`](https://github.com/ray-di/Ray.MediaQuery/blob/1.x/docs/tutorial/src/run.php) は全章を通しで実行する完成形の統合デモである。各章の「期待出力」には、その意味が分かりやすい参照フレームを選んで `(単独実行)` または `(統合 run.php)` のラベルを付けてある
> **完成版 `run.php` について**: [`docs/tutorial/src/run.php`](https://github.com/ray-di/Ray.MediaQuery/blob/1.x/docs/tutorial/src/run.php) は全章を通しで実行する完成形の統合デモである。各章の「期待出力」には、その意味が分かりやすい参照フレームを選んで `(単独実行)``(統合 run.php)`、または `paginated` のような確認対象のラベルを付けてある
>
> - `(単独実行)` … その章のコードだけを小さな `run.php` で動かしたときの出力。前半の機能紹介ではこちらを使う。
> - `(統合 run.php)` … 完成版 `run.php` を頭から通しで実行し、前の章のデータ投入・UPDATE / DELETE まで積み上がった状態での出力。`id` や件数が前章までの累積に依存する後半ではこちらを使う。
Expand Down Expand Up @@ -139,16 +139,16 @@ docs/tutorial/src/
- composer の autoload を準備
- SQLite メモリ DB に空のスキーマを流して動作確認できる状態にする

### Step 1. リポジトリを clone して composer install
### Step 1. リポジトリを clone して composer install --no-dev

```bash
php -m | grep '^pdo_sqlite$'
php -m | grep -E '^(PDO|mbstring|pdo_sqlite|tokenizer)$'
git clone https://github.com/ray-di/Ray.MediaQuery.git
cd Ray.MediaQuery
composer install
composer install --no-dev
```

`pdo_sqlite` が表示されれば OK。
`PDO`、`mbstring`、`pdo_sqlite`、`tokenizer` が表示されれば OK。チュートリアル実行には本体の依存だけで足りるので `--no-dev` を付けている。開発ツールやテストスイートも使う場合は、プロジェクトの対応 PHP バージョンに合わせて `composer install` を実行する

### Step 2. ディレクトリ構造を作る

Expand All @@ -164,11 +164,11 @@ mkdir -p mywork/blog mywork/sql

### Step 3. `composer.json` に autoload を追加

自分の `MyBlog\` 名前空間を `mywork/blog/` に対応づける。`run.php` を動かすだけなら次章のブートストラップ (`$loader->addPsr4()`) で足りるので必須ではないが、IDE 補完や PHPUnit から自分のクラスを使うなら登録しておく。
自分の `MyBlog\` 名前空間を `mywork/blog/` に対応づける。`run.php` を動かすだけなら次章のブートストラップ (`$loader->addPsr4()`) で足りるので必須ではないが、IDE 補完や PHPUnit から自分のクラスを使うなら登録しておく。第0章では `composer install --no-dev` を使うので、`autoload-dev` ではなく通常の `autoload` に登録する。

```json
{
"autoload-dev": {
"autoload": {
"psr-4": {
"MyBlog\\": "mywork/blog/"
}
Expand Down Expand Up @@ -571,7 +571,7 @@ Hello
- 戻り値型 `Article|null` (単一) や docblock `@return array<Article>` (複数) を見て、フレームワークが `Article` を組み立てる。
- 今回の `Article` は constructor を持つので、`FetchNewInstance` が選ばれて `PDO::FETCH_FUNC` で組み立てられる。**SELECT カラム順が constructor 引数順にそのまま渡される**。詳細は次章。
- Constructor Promotion のおかげで getter / setter は不要。`readonly` で意図せぬ変更を防ぐ。
- PHP 8.4 以降なら `final readonly class Article { ... }` と書けばさらに簡潔。
- PHP 8.2 以降なら `final readonly class Article { ... }` と書けばさらに簡潔。

---

Expand Down Expand Up @@ -1272,7 +1272,7 @@ printf("page 1 has %d items, hasNext=%s\n", count($page1->data), $page1->hasNext
echo $page1->data[0]->title, "\n";
```

### 期待出力 (第11章 / paginated)
### 期待出力 (第11章 / paginated / 写経 run.php)

```text
total items=31
Expand Down Expand Up @@ -1325,7 +1325,7 @@ printf(
);
```

### 期待出力 (第11章 / statsPaginated)
### 期待出力 (第11章 / statsPaginated / 写経 run.php)

```text
first stats row=MyBlog\ArticleStats commentCount=2 excerpt='Updated body.'
Expand Down
Loading