[CodeIgniter] CodeIgniter4 のはじめ方


2020年10月28日

えだです。

CodeIgniter4でシステムを作ってみたので、その備忘録です。

今まで業務でci3を利用したことはあったのですが、ci4はありませんでした。
ci3と比較すると多くの仕様変更が施されていて、まるで別物な認識でいたからです。

疎遠になっていましたが、手頃な規模のシステム構築があったので導入してみました。
(100%理解していないので、「それちがうのでは?」があればコメント頂けると嬉しいです)

環境は2020.10時点の最新構成でやってみました。

  • CodeIgniter 4.0.4
  • twig 3.1.0

旧バージョンとの相違点は?

相違点はホントに多くありますが、最初に衝撃を受けたのはクラス名とメソッド名がスネークケースからキャメルケースに変わったことです。
次点はORM導入でしょうか。

導入する

Composerでやってしまいます。
今回はtennisというシステムなのでリネームしてしまいます

初期設定する

はじめに設定しないといけないと思われるものたち

  1. /Config/Database.php
  2. データベースまわりの設定

  3. /Config/Routes.php
  4. DefaultControllerを変更するなら

  5. /Config/App.php
  6. $baseURL:ルートURL 設定しないとレンダリングに2秒くらい要する?(個人的にハマりました)
    $appTimezone:’Asia/Tokyo’ 設定しないとORMのuseTimestamps使った時にシカゴ時間になります

アーキテクトを考える

ciはMVCパターンで構成されていますが、定義は比較的に自由です。
なので自由なアーキテクト設計が可能な分、バランスを取らないとControllerが肥大化しがちになります。
そこで私の場合、ci3で規模が大き目になる時はControllerとModelの間にbusiness logic(以下、BL)を切り離して扱う概念をServiceという名称で設けていました。
でもci4では全クラスがServiceとして提供され、インスタンスを返せます。
なのでBLを立てるなら別の名称にしないといけないなと思ってます。

Controller

ci4では「/Controllers/BaseController.php」が基底クラスのようです。
はじめから用意されていて中身は空でした。
(ci3では任意で「/core/MY_Controller.php」を設置する方式)

Controllerとしての役割はci3と変わらないです。

Model

なんとO/Rマッパー(ORM)対応してます。

賛否分かれるところですが、利用せずQuery Builder使う手もあります。

今回はせっかくなので使うことにしました。
(後々、結局は混在することになりました)

Query Builderも少しだけ作法が変わってるみたいです。
いまのとこ気付いたのはテーブル指定が「->from()」から「->table()」になっただけですが。

ci4ユーザーガイド:Model
(ORM利用なら必読)

ci4ユーザーガイド:Query Builder
(ci3方式ならこちら)

View

ci3でもあったView Parseですが使ったことなかったので今回は使ってみました。

呼び出し方はこちら。

$dataが展開されて{key}で指定できます。

このテンプレートはループの書き方が気持ちいいです。
たとえばこんなデータなら、

こんなカンジで書けます。

展開されて1次元目を指定しなくてよいのでスッキリします。

ただFiltersに難があって、dateフォーマットでExceptionとなりました。

FWのソース追えば解消できると思いますが、そもそも後々の汎用性を考えるとテンプレートエンジン使ったほうがいいかなと悩んでます。

ci4ユーザーガイド:View Parse

twig

テンプレートエンジンならやはりtwigかなと思って試しに入れてみます。

実装は自分でやりたい派なのですが、作成されている方がおられたので参考にさせていただきました。

CodeIgniter4 for Twig

一時中断

今回はとりあえずここまでです。
感想は「やっぱ違うな」です。
でもciらしさはまだまだあるので、嫌いにはなれない気がしてます。

参考にしたドキュメントはやっぱりコレです。

CodeIgniter4 User Guide


PHP

Posted by えだ