リクエスト詳細
🐛 バグ報告
対応完了
対象アプリ: QualityGate - 製品検査・品質記録管理システム
render_layout() が lib.php に未定義のまま呼び出され Fatal Error が発生する
## 1. 不具合の内容
`pages/dashboard.php`・`pages/export.php`・`pages/items.php`・`pages/inspectors.php` など全ページの末尾で `render_layout(...)` が呼び出されているが、`lib.php` の抜粋には `render_layout` 関数の定義が存在しない。`lib.php` に含まれる関数は `app_config`, `app_db`, `license_status`, `h`, `csrf_token`, `csrf_check`, `qg_pdo_*`, `qg_json`, `qg_defect_types`, `qg_inspection_types`, `qg_rate`, `qg_rate_text`, `qg_items`, `qg_inspectors`, `qg_record`, `qg_record_photos`, `qg_defect_photo_url`, `qg_filter_date`, `qg_dashboard_data` のみであり、レイアウト描画用の `render_layout` は見当たらない。
## 2. 根拠・発生しそうな条件
- `index.php` は `require __DIR__ . '/lib.php'` のみを実行し、その後 `require $pageFile` で各ページファイルを読み込む。
- 各ページファイルは `render_layout` を直接呼び出しているが、この関数を定義するファイル(例: `layout.php` や `template.php` など)が `lib.php` からも `index.php` からも `require` されていない。
- `lib.php` の末尾付近が `[truncated]` になっているため「その先に定義がある」可能性はゼロではないが、抜粋された `lib.php` の全関数リストに含まれておらず、かつ `index.php` でも追加 `require` がないため、別ファイルへの分離漏れまたは `lib.php` への定義漏れと判断できる。
- 条件に関係なく **どのページを開いても** `Fatal Error: Call to undefined function render_layout()` が発生し、画面が真っ白になる。
## 3. 期待動作
`render_layout('ページタイトル', callable)` が正常に解決され、共通ヘッダー・ナビ・フッターを含む HTML を出力してページが表示される。
## 4. 修正方針
### 方針A(推奨): `lib.php` 末尾に `render_layout` を追加する
```php
function render_layout(string $title, callable $body): void {
$flash = $_SESSION['flash'] ?? null;
unset($_SESSION['flash']);
$license = license_status();
require __DIR__ . '/templates/layout.php';
}
```
`templates/layout.php` が既に存在するならそれを `require` する形で接続する。
### 方針B: `index.php` に require を追加する
`render_layout` が独立した `template.php` や `layout.php` に定義されている場合、`index.php` の `require __DIR__ . '/lib.php';` の直後に該当ファイルの `require` を追加する。
```php
require __DIR__ . '/lib.php';
require __DIR__ . '/layout.php'; // ← 追加
```
いずれの方針でも、修正後に全ページ(dashboard / records / record_form / items / inspectors / report_print / export)を順に開き、Fatal Error が出ないことを確認すること。
`pages/dashboard.php`・`pages/export.php`・`pages/items.php`・`pages/inspectors.php` など全ページの末尾で `render_layout(...)` が呼び出されているが、`lib.php` の抜粋には `render_layout` 関数の定義が存在しない。`lib.php` に含まれる関数は `app_config`, `app_db`, `license_status`, `h`, `csrf_token`, `csrf_check`, `qg_pdo_*`, `qg_json`, `qg_defect_types`, `qg_inspection_types`, `qg_rate`, `qg_rate_text`, `qg_items`, `qg_inspectors`, `qg_record`, `qg_record_photos`, `qg_defect_photo_url`, `qg_filter_date`, `qg_dashboard_data` のみであり、レイアウト描画用の `render_layout` は見当たらない。
## 2. 根拠・発生しそうな条件
- `index.php` は `require __DIR__ . '/lib.php'` のみを実行し、その後 `require $pageFile` で各ページファイルを読み込む。
- 各ページファイルは `render_layout` を直接呼び出しているが、この関数を定義するファイル(例: `layout.php` や `template.php` など)が `lib.php` からも `index.php` からも `require` されていない。
- `lib.php` の末尾付近が `[truncated]` になっているため「その先に定義がある」可能性はゼロではないが、抜粋された `lib.php` の全関数リストに含まれておらず、かつ `index.php` でも追加 `require` がないため、別ファイルへの分離漏れまたは `lib.php` への定義漏れと判断できる。
- 条件に関係なく **どのページを開いても** `Fatal Error: Call to undefined function render_layout()` が発生し、画面が真っ白になる。
## 3. 期待動作
`render_layout('ページタイトル', callable)` が正常に解決され、共通ヘッダー・ナビ・フッターを含む HTML を出力してページが表示される。
## 4. 修正方針
### 方針A(推奨): `lib.php` 末尾に `render_layout` を追加する
```php
function render_layout(string $title, callable $body): void {
$flash = $_SESSION['flash'] ?? null;
unset($_SESSION['flash']);
$license = license_status();
require __DIR__ . '/templates/layout.php';
}
```
`templates/layout.php` が既に存在するならそれを `require` する形で接続する。
### 方針B: `index.php` に require を追加する
`render_layout` が独立した `template.php` や `layout.php` に定義されている場合、`index.php` の `require __DIR__ . '/lib.php';` の直後に該当ファイルの `require` を追加する。
```php
require __DIR__ . '/lib.php';
require __DIR__ . '/layout.php'; // ← 追加
```
いずれの方針でも、修正後に全ページ(dashboard / records / record_form / items / inspectors / report_print / export)を順に開き、Fatal Error が出ないことを確認すること。
💬 返信 (3)
🛠 開発を開始しました (バグ修正 (quality-gate))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「QualityGate - 製品検査・品質記録管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=quality-gate
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/quality-gate/
ご利用ありがとうございます!
ご要望いただいた「QualityGate - 製品検査・品質記録管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=quality-gate
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/quality-gate/
ご利用ありがとうございます!
Echo
Iris