このすみろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

CodeIgniter4を使い始めたので、チュートリアルをやってみた

業務でCodeIgniter4を使い始めました。

既存システムのリプレースプロジェクトなのですが、CodeIgniter4は未経験なので、まずはチュートリアルをやりました。 ざっとメモしておきます。

codeigniter4.github.io

インストール

CodeIgniter4のインストールは、composerがもっともお手軽です。

composer create-project codeigniter4/appstarter project-root

ルーティング

パスに対応するコントローラーとメソッドを、ルーティングファイルに書きます。

<?php

$routes->get('pages', 'Pages::index');
$routes->get('(:any)', 'Pages::view/$1');

コントローラー

あまり特徴的なことはない代わり、わりと普通に書けます。

<?php

namespace App\Controllers;

use App\Models\NewsModel;

class News extends BaseController
{
    public function index()
    {
        $model = model(NewsModel::class);

        $data = [
            'news'  => $model->getNews(),
            'title' => 'News archive',
        ];

        return view('templates/header', $data)
            . view('news/overview')
            . view('templates/footer');
    }
}

モデル

DBのテーブルごとにモデルクラスを作れば良く、これもわりと素直なイメージです。

<?php

namespace App\Models;

use CodeIgniter\Model;

class NewsModel extends Model
{
    protected $table = 'news';
    protected $allowedFields = ['title', 'slug', 'body'];

    public function getNews($slug = false)
    {
        if ($slug === false) {
            return $this->findAll();
        }

        return $this->where(['slug' => $slug])->first();
    }
}

レコードの保存も、たとえばコントローラーからシンプルに実行するとこんな感じです。

<?php

$model = model(NewsModel::class);

$model->save([
    'title' => $this->request->getPost('title'),
    'slug'  => url_title($this->request->getPost('title'), '-', true),
    'body'  => $this->request->getPost('body'),
]);

あとがき

チュートリアルをひととおり触ってみた感想としては、わりと素直なフレームワークです。

個人的な感想としては、中規模サービス向けだと想います。 Laravelを採用するほどの規模ではないけど、Slimよりはフレームワークの機能が欲しいケースに良さそうです。

ひとつ悩みどころとしては、何もしないとView側が素直なPHPファイルになるので、Viewをどういう方針で書いていくかの決めが人によって判断分かれそうです。 (テンプレートエンジンを使うかどうかなど)