環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

HelloWorldとechoしてもPHPと友達になれなかったから、フレームワークでやってみるMVC(4)CodeIgniter

大意は初回書いたので長々とは書かないが、せっかくなのでControllerからViewへの連携や、ルーティングにも触れながらHelloWorldをやって、やや骨太のHelloWorldになってもらおうじゃないかということだ。(毎回

(単純にフレームワークに触れてみたいだけだったりするのは内緒)

CodeIgniter

CodeIgniterはかなり以前にプライベートで触ってみた程度だが、非常に軽量でコード的な自由度が大きかったイメージがある。

プロジェクト作成

今回は「CodeIgniter v4.1.1」を利用する。CodeIgniterと検索すると、上位に「日本CodeIgniterユーザ会」によるユーザーガイドが出てくるが、こちらは古いバージョンのユーザーガイドしかないので注意。

https://codeigniter.com/

「Download」リンクをクリックし、zipファイルをダウンロード。

framework-4.1.1.zipを解凍して出来たフォルダをプロジェクト名に変更する。

起動してみる

まだ何も修正を加えていないが、まずは一度起動してみる。起動にはsparkコマンドが使えるようだ。

# プロジェクトフォルダに入って実行
php spark serve

macのデフォルトPHPでは動作しないことがある

というのは、macにデフォルトで入っているPHPはintlモジュールが有効になっていないようなので、上記コマンドを実行した時に、エラーとなった。

Homebrewやphpenvなどでインストールを行って、intlが有効になれば問題ないようだ。

$ php spark serve
-------------------------------------------------

[CodeIgniter\Exceptions\FrameworkException]

The framework needs the following extension(s) installed and loaded: {0}.

at SYSTEMPATH/CodeIgniter.php:224

-------------------------------------------------

app/Controllers/Hello.php

初期起動画面にて、「app/Controllers/Home.php」と「app/Views/welcome_message.php」でwelcomeページが表示されているお知らせがあるので、参考にしつつ新規ファイルを作成してみることにする。

<?php

namespace App\Controllers;

class Hello extends BaseController
{
        public function index()
        {
                $data['title'] = 'Hello World !! - CodeIgniter';
                $data['description'] = '日本CodeIgniterユーザ会のガイドにだまされて、v3.xを触りそうになった。composer.jsonのPHPバージョン要件が「5.2.4」だったので目が覚めた。';
                return view('hello', $data);
        }
}

app/Views/hello.php

<!doctype html>
<html>
<head>
    <title>CodeIgniter Tutorial</title>
</head>
<body>
    <h1><?= esc($title) ?></h1>
    <div><?= esc($description) ?></div>
    <em>© 2021</em>
</body>
</html>

app/Config/Routes.php

$routes->get('/', 'Home::index');
↓
$routes->get('/', 'Hello::index');

確認してみる

無事に表示された。

さいごに

公式ドキュメントの「Static pages」のページで紹介されている通り、URLパターンによるルーティングのマッチは容易に出来るようになっているようだ。

http://example.com/[controller-class]/[controller-method]/[arguments]

綺麗なパターンを設計することは大事だが、現場などでそう安々といかない場合でも今回のようにRoutes.phpを設定すれば問題ない。

個人的には、自分の意図しないアクセスが万が一にでも許可されないように、オートルーティングは切る。