CodeIgniter4の公式チュートリアルをやってみる (1)
(2021-12-05 追記) この記事は古くなっています。 「CodeIgniter4入門 公式チュートリアル (1)静的ページの表示」 を参照してください。
この記事は 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_ENVIRONMENT
を production
から 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 ページが表示されます。
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>© 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
が存在する場合は、そのページがヘッダとフッタ付きで表示されます。
以下のようになります。
- http://localhost:8080/pages/view の場合は、デフォルト引数の値
home
になり、Views/pages/home.php
- http://localhost:8080/pages/view/home の場合は
Views/pages/home.php
- http://localhost:8080/pages/view/about の場合は
Views/pages/about.php
- http://localhost:8080/pages/view/shop の場合は対応するファイルが存在しないため 404
ルーティング設定の追加
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