PHP
[CodeIgniter] CodeIgniter4 のはじめ方
えだ
更新日:2021/08/12
えだです。
CodeIgniter4でシステムを作ってみたので、その備忘録です。
今まで業務でci3を利用したことはあったのですが、ci4はありませんでした。
ci3と比較すると多くの仕様変更が施されていて、まるで別物な認識でいたからです。
疎遠になっていましたが、手頃な規模のシステム構築があったので導入してみました。
(100%理解していないので、「それちがうのでは?」があればコメント頂けると嬉しいです)
環境は2020.10時点の最新構成でやってみました。
- CodeIgniter 4.0.4
- twig 3.1.0
旧バージョンとの相違点は?
相違点はホントに多くありますが、最初に衝撃を受けたのはクラス名とメソッド名がスネークケースからキャメルケースに変わったことです。
次点はORM導入でしょうか。
導入する
Composerでやってしまいます。
今回はtennisというシステムなのでリネームしてしまいます。
1 2 |
$ composer create-project codeigniter4/appstarter -s beta $ mv appstarter tennis |
初期設定する
はじめに設定しないといけないと思われるものたち
- /Config/Database.php
- /Config/Routes.php
- /Config/App.php
データベースまわりの設定
DefaultControllerを変更するなら
$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ですが使ったことなかったので今回は使ってみました。
呼び出し方はこちら。
1 2 |
$parser = \Config\Services::parser(); echo $parser->setData($data)->render('home.tpl'); |
$dataが展開されて{key}で指定できます。
このテンプレートはループの書き方が気持ちいいです。
たとえばこんなデータなら、
1 2 3 4 |
$users = [ ['id'=>'A','name'=>'dog'] , ['id'=>'B','name'=>'cat'] ]; |
こんなカンジで書けます。
1 2 3 |
{users} {name} {/users} |
展開されて1次元目を指定しなくてよいのでスッキリします。
ただFiltersに難があって、dateフォーマットでExceptionとなりました。
1 |
{ value|date(Y-m-d) } |
FWのソース追えば解消できると思いますが、そもそも後々の汎用性を考えるとテンプレートエンジン使ったほうがいいかなと悩んでます。
ci4ユーザーガイド:View Parse
twig
テンプレートエンジンならやはりtwigかなと思って試しに入れてみます。
1 |
$ composer require "twig/twig:^3.0" |
実装は自分でやりたい派なのですが、作成されている方がおられたので参考にさせていただきました。
CodeIgniter4 for Twig
一時中断
今回はとりあえずここまでです。
感想は「やっぱ違うな」です。
でもciらしさはまだまだあるので、嫌いにはなれない気がしてます。
参考にしたドキュメントはやっぱりコレです。
CodeIgniter4 User Guide