CI4+Twig、楽勝のはずが500エラーで全部ハマった話(ss-twig編)

 はじめに

CodeIgniter4 と Twig。
この組み合わせなら、ログイン画面くらいサクッと作れるはずだった。

「Twigでレイアウト組んで、view()で返すだけでしょ?」

そう思っていた時期が、私にもありました。


AIで雛形を作る(順調)

AIにお願いして以下を一式生成:

  • Controller

  • Routes

  • Twigテンプレート

  • レイアウト

構成はこんな感じ:

app/Views/auth/login.twig
app/Views/layouts/auth.twig
app/Controllers/Auth.php
app/Config/Routes.php

ここまでは順調。
むしろ「もう終わったのでは?」くらいの勢い。


/login にアクセス → 500エラー

ブラウザで /login を開くと…

Whoops! We seem to have hit a snag.

はい、出ました500。


ログを見ると…

Invalid file: "auth/login.php"

…いやいや。

👉 Twigで書いてるのに、PHPビュー探してる?


状況整理

ここで冷静になる:

  • Twigファイルはある

  • ルートも正しい

  • Controllerも呼ばれている

なのに:

👉 view() が Twig を使っていない


原因その①:view()はTwigを知らない

つまりこういうこと:

  • Twig自体は使える

  • でも view() は PHP専用

  • → PHPビューを探しに行く


対策:ss-twigを導入

使ったのはこれ:

kenjis/codeigniter-ss-twig

これでTwigが使えるようになる…はずだった。


原因その②:twig() 関数が無い

ネットの情報だと:

return twig('auth/login.twig');

と書けるはずが…

👉 twig() が存在しない


調べた結果

今回のバージョンでは:

  • bootstrap.php → 無い

  • twig() → 無い

👉 関数ではなくクラスで使う設計だった


対策:クラスで呼び出す

use Kenjis\CI4Twig\Twig;

$twig = new Twig();
return $twig->render('auth/login.twig');

原因その③:namespaceが違う

最初こう書いていた:

use Kenjis\CodeIgniterTwig\CI4Twig\Twig;

👉 存在しない

正しくは:

use Kenjis\CI4Twig\Twig;

原因その④:アプリ全体が死んだ

Common.phpに処理を書いたら:

👉 サイト全体が500

原因:

  • Common.phpは全リクエストで実行される

  • 初期化コードを書くと即死する


原因その⑤:.twig が2回つく

ログに出たエラー:

auth/login.twig.twig

原因:

👉 .twig が自動付与される


対策

$twig->render('auth/login');

👉 拡張子は書かない


ついに表示された

そしてついに:

👉 HTMLが出た


しかし次の壁

GET /css/auth.css → 404

原因その⑥:CSSの置き場所

<link rel="stylesheet" href="/css/auth.css">

これは:

public/css/auth.css

を見に行く


対策

public/css/auth.css

に配置


今回のまとめ

今回ハマったポイント:

  • view() は Twig を使わない

  • twig() は存在しない場合がある

  • namespace が違う

  • Common.php で全体が死ぬ

  • .twig が二重になる

  • CSSは public に置く


結論

👉 CI4+Twigは「どこで使うか」を理解しないと普通にハマる


次回

  • レイアウト整理

  • バリデーション

  • ログイン処理完成

ようやく「普通に画面が出る」ところまで来た。
長かった。


おわりに

今回のハマりはすべて意味があった。

同じところで詰まる人の助けになれば嬉しいです。

コメント

人気の投稿