CodeIgniter4の公式チュートリアルをやってみる (1) post

この記事は CodeIgniter Advent Calendar 2020 - Qiita の1日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

CodeIgniter 4 の公式ドキュメントにあるチュートリアルをやってみます。

CodeIgniter 4 の概要を把握しましょう。

インストール

CodeIgniter 4 を composer からインストールします。

$ composer create-project codeigniter4/appstarter ci4-news

ci4-news フォルダに CodeIgniter 4.0.4 がインストールされました。

フォルダ構成

CodeIgniter 4 のフォルダ構成は以下のようになっています。

ci4-news/
├── app/ ... アプリケーション
│   ├── Common.php
│   ├── Config/      ... 設定
│   ├── Controllers/ ... コントローラ
│   ├── Database/    ... データベース
│   ├── Filters/
│   ├── Helpers/
│   ├── Language/
│   ├── Libraries/
│   ├── Models/      ... モデル
│   ├── ThirdParty/
│   └── Views/       ... ビュー
├── builds*
├── composer.json
├── composer.lock
├── env
├── phpunit.xml.dist
├── public/ ... Web公開領域(ドキュメントルート)
│   ├── favicon.ico
│   ├── index.php
│   └── robots.txt
├── spark*
├── tests/ ... テストファイル
│   ├── _support/
│   ├── database/
│   ├── session/
│   └── unit/
├── vendor/   ... Composer管理
└── writable/ ... 書き込み用フォルダ
    ├── cache/
    ├── debugbar/
    ├── logs/
    ├── session/
    └── uploads/

開発環境に設定

デフォルトでは CodeIgniter 4 は本番環境に設定されています。

開発中は便利な機能を使うために開発環境に変更します。

プロジェクトのルートにある env.env にコピーし、CI_ENVIRONMENTproduction から development に変更します。

--- env 2020-07-16 12:44:28.000000000 +0900
+++ .env    2020-12-01 16:40:17.000000000 +0900
@@ -14,7 +14,7 @@
 # ENVIRONMENT
 #--------------------------------------------------------------------

-# CI_ENVIRONMENT = production
+CI_ENVIRONMENT = development

 #--------------------------------------------------------------------
 # APP

開発用Webサーバの起動

ターミナルから、以下のコマンドを実行します。

$ php spark serve

http://localhost:8080/ でサーバが起動しました。ブラウザからアクセスすると、Welcome ページが表示されます。

Welcome ページ その1

Welcome ページ その2

Home コントローラ

Welcome ページを処理するデフォルトコントローラは、app/Controllers/Home.php にあります。

Home コントローラは以下のようになっています。

<?php namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        return view('welcome_message');
    }

    //--------------------------------------------------------------------

}

CodeIgniter 4 の view() メソッドでビューファイルを表示できます。

View ファイルの作成

静的ページファイル

以下の静的ページを作成します。

Views/pages/home.php

<p>Views/pages/home.php</p>

Views/pages/about.php

<p>Views/pages/about.php</p>

テンプレートファイル

ヘッダとフッタ用のテンプレートファイルを作成します。

Views/templates/header.php

<!doctype html>
<html>
<head>
    <title>CodeIgniter Tutorial</title>
</head>
<body>

    <h1><?= esc($title); ?></h1>

Views/templates/footer.php

    <em>&copy; 2019</em>
</body>
</html>

Pages コントローラ

app/Controllers/Pages.php を作成します。

<?php
namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\Exceptions\PageNotFoundException;

class Pages extends Controller
{
    public function index()
    {
        return view('welcome_message');
    }

    public function view($page = 'home')
    {
        if ( ! is_file(APPPATH.'/Views/pages/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            throw new PageNotFoundException($page);
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        echo view('templates/header', $data);
        echo view('pages/'.$page, $data);
        echo view('templates/footer', $data);
    }
}

これで、ビューとコントローラが作成できました。

http://localhost:8080/pages/view 以下にアクセスすると、Views/pages/*.php が存在する場合は、そのページがヘッダとフッタ付きで表示されます。

以下のようになります。

ルーティング設定の追加

app/Config/Routes.php を開き、以下の 1行を追加します。

--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -32,6 +32,8 @@ $routes->setAutoRoute(true);
 // route since we don't have to scan directories.
 $routes->get('/', 'Home::index');

+$routes->get('(:any)', 'Pages::view/$1');
+
 /**
  * --------------------------------------------------------------------
  * Additional Routing

これで、例えば、http://localhost:8080/about にアクセスすると、Pages コントローラの view() メソッドに about が渡されるようにルーティングされます。

http://localhost:8080/about でアクセスできるようになりました。

CodeIgniter4の公式チュートリアルをやってみる (2) へ続きます。

この記事は CodeIgniter Advent Calendar 2020 - Qiita の1日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

Date: 2020/12/01

Tags: codeigniter, codeigniter4