アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

CodeIgniter入門 #1:Hello CodeIgniter World!!!

※「CodeIgniter入門する人向け記事」じゃなくて「自分がCodeIgniter入門してみた記事」です

CodeIgniter入門シリーズ カテゴリーの記事一覧 - アナログCPU:5108843109

仕事でCodeIgniter触ることになり自分でなんか作った方が理解早そうだなと思って、なんかやってみる。
あとPhalconほどじゃないけど名前がかっこいいし、高速で軽量で自由度が高いということで。
とりあえずHelloWorldまでやってみます。

CodeIgniter へようこそ — CodeIgniter 3.2.0-dev ドキュメント


開発環境はWindows、サーバーはLinuxの想定です。
まあXAMPPで動かすだけなんですけど。

今回やること

  • CodeIgniterのダウンロード
  • HelloWorld(サンプルページの改造から新規ページ追加まで)

CodeIgniterのダウンロード

以下からzipをダウンロードして展開します。
www.codeigniter.com

ちなみに今回ダウンロードしたのは3.1.10でした。

中身を見てみる

こんな構成でした。

  • application
  • system
  • user_guide
  • index.php
  • …などなど


えっ…これさあ…
もしかしてここがドキュメントルートになるの??自由すぎない???

applicationとかsystemとかのディレクトリを覗いてみると、
以下全ディレクトリに「403だよ」って表示するだけのindex.htmlが設置されている…。
まじかよ…。
じゃあドキュメントルートの下に置かなきゃいいじゃん、と思いましたが、ひとまずこの形で進めてみます。
(ちなみに仕事で触るプロジェクトはapplicationとsystemを外に移してました。せやろな)

ローカルで動かしてみる

きっとサンプルページ的なものは最初から出るだろうと踏んで、ダウンロードしたファイルには一切手を加えず適当なところに設置。
英語アレルギーに耐えつつreadmeを見てみるとPHP5.6以上ということだったので、適切なXAMPPを選ぶ。
httpd.confとhostsを編集してXAMPPを起動してアクセス。

f:id:honey8823:20190618130921p:plain

えー…

えーと…

このページのviewは application/views/welcome_message.php で、
controllerは application/controllers/Welcome.php だよ、ってことですかね。

とりあえず動いたっぽいので良し。

HelloWorldしてみる

じゃあ、ここを差し替えてHelloWorldしてみます。

その1:viewを書き換えてみる

application/views/welcome_message.php の内容を適当にいじってからリロード。
無事反映されました。まあそりゃそうなんですけど、確かにここに紐づいてますよということで。

元に戻します。

その2:別のviewを呼んでみる

application/views/welcome_message.php を複製して、HelloWorld仕様に適当に書き換えます。
ここでは hello_world.php としました。
それから application/controllers/Welcome.php から複製したviewを呼ぶよう変更。

public function index()
{
	// $this->load->view('welcome_message'); // これをコメントアウトして
	$this->load->view('hello_world'); // こうじゃ
}

それからリロードすると無事反映されました。
Welcome.php も元に戻します。

その3:別のcontrollerを呼んでみる

次は application/controllers/Welcome.php も複製して、HelloWorld仕様に書き換えます。
ここでは HelloWorld.php としました。
(書き換え内容はその2と同じ)

じゃあこれをどこから呼ぶんだ、と探してみた結果、
application/config/routes.php でした。

// $route['default_controller'] = 'welcome'; // これをコメントアウトして
$route['default_controller'] = 'helloworld'; // こうじゃ

こうやってwelcomeを呼んでいるのをhelloworldに書き換えてリロード。
無事反映されました。

routes.php ももとに戻します。

その4:新しくページを作る

さっきからトップページを書き換えているだけなので、今度は新しくページを作ってみます。

長くなるので結論だけ書くと、以下2つの手順でいけました。

① config/config.php の調整

// $config['index_page'] = 'index.php'; // このindex.phpを
$config['index_page'] = ''; // 消す

②ルートディレクトリ(index.phpと同じ階層)に、下記内容の .htaccess を設置

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

この調整をしてから /helloworld/ にアクセスすると無事に表示されました!

ちなみに、controllerに hoge メソッドを追加すると、/helloworld/hoge/ でアクセスできます。

おしまい

無事にHelloWorldできましたのでとりあえず今回はここまで!

蛇足:ルーティングについて

> 長くなるので結論だけ書くと
と書きましたが、その部分の補足を。

まあ新しいページ追加するつってもルーティングをなんとかすればいけるっしょ、とユーザーガイドを見てみました。
URI ルーティング — CodeIgniter 3.2.0-dev ドキュメント

URI のセグメントは通常、つぎのパターンに従います:

example.com/class/function/id/

お、もしかして設定いらない? と思って /hellowold/ にアクセスしてみるものの、404。

じゃあ一応設定してみる?と思って

$route['helloworld'] = 'helloworld';

としてみましたが、まだ404。

軽くぐぐってみると同じような?症状の人を発見。未解決だけど。
PHP - CodeigniterでURIルーティングがうまく動作しない。|teratail

(私のサーバーのドメイン)/index.php/users/list/でアクセスできた

なんじゃそりゃ、と思いつつ /index.php/helloworld/ にアクセスしてみると確かに正常に表示された。
なんじゃそりゃ。

もうちょっとユーザーガイドを見てみるとこんなページを発見。
CodeIgniter の URL — CodeIgniter 3.2.0-dev ドキュメント

デフォルトでは index.php ファイルは URL に含まれます

…?
???
え、なんで?

なんでかは分かりませんが、↓も参考にしつつ先に書いた方法で解決しました。
CodeIgniter 3でURLに付加されるindex.phpを外したい(取り除きたい) | onocom