CodeIgniter入門 #1:Hello CodeIgniter World!!!
※「CodeIgniter入門する人向け記事」じゃなくて「自分がCodeIgniter入門してみた記事」です
CodeIgniter入門シリーズ カテゴリーの記事一覧 - アナログCPU:5108843109
仕事でCodeIgniter触ることになり自分でなんか作った方が理解早そうだなと思って、なんかやってみる。
あとPhalconほどじゃないけど名前がかっこいいし、高速で軽量で自由度が高いということで。
とりあえずHelloWorldまでやってみます。
CodeIgniter へようこそ — CodeIgniter 3.2.0-dev ドキュメント
開発環境はWindows、サーバーはLinuxの想定です。
まあXAMPPで動かすだけなんですけど。
今回やること
- CodeIgniterのダウンロード
- HelloWorld(サンプルページの改造から新規ページ追加まで)
中身を見てみる
こんな構成でした。
- application
- system
- user_guide
- index.php
- …などなど
…
えっ…これさあ…
もしかしてここがドキュメントルートになるの??自由すぎない???
applicationとかsystemとかのディレクトリを覗いてみると、
以下全ディレクトリに「403だよ」って表示するだけのindex.htmlが設置されている…。
まじかよ…。
じゃあドキュメントルートの下に置かなきゃいいじゃん、と思いましたが、ひとまずこの形で進めてみます。
(ちなみに仕事で触るプロジェクトはapplicationとsystemを外に移してました。せやろな)
ローカルで動かしてみる
きっとサンプルページ的なものは最初から出るだろうと踏んで、ダウンロードしたファイルには一切手を加えず適当なところに設置。
英語アレルギーに耐えつつreadmeを見てみるとPHP5.6以上ということだったので、適切なXAMPPを選ぶ。
httpd.confとhostsを編集してXAMPPを起動してアクセス。
えー…
えーと…
このページの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/helloworld/ にアクセスしてみると確かに正常に表示された。
なんじゃそりゃ。
もうちょっとユーザーガイドを見てみるとこんなページを発見。
CodeIgniter の URL — CodeIgniter 3.2.0-dev ドキュメント
デフォルトでは index.php ファイルは URL に含まれます
…?
???
え、なんで?
なんでかは分かりませんが、↓も参考にしつつ先に書いた方法で解決しました。
CodeIgniter 3でURLに付加されるindex.phpを外したい(取り除きたい) | onocom