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は「どこで使うか」を理解しないと普通にハマる
次回
レイアウト整理
バリデーション
ログイン処理完成
ようやく「普通に画面が出る」ところまで来た。
長かった。
おわりに
今回のハマりはすべて意味があった。
同じところで詰まる人の助けになれば嬉しいです。

コメント