超絶初心者がCodeIgniterを一から導入やってみました
こんにちは、ダディです。
PHPもようやく慣れてきたかな~と感じているこの頃、そろそろ生PHPから離れて
フレームワークを駆使しようと思うようになりました。
以前ベテランな方が用意したCodeIgniterで構成されたWebサービスを一緒に触らせてもらっていたのですが、
“(お、おう…こんなこと出来るのか…)”や”(PHP側のフレームワークってメリットあるの?)”状態。
プログラム初心者とはいえ、PHPフレームワークをしっかり知っておけば
これから楽に開発とか出来るのでは!
以前ここに書いたBootstrapと合わせればフレームワークの使い手になれるかも!
と息巻いた私は、自分で使っていきながらCodeIgniterについて勉強しようと思ったわけです。
ここでは超絶初心者が初心者に理解できる範囲のCodeIgniterの紹介をするページになっています。お気軽に御覧ください!
まずはCodeIgniterを入れて中身知っていこう
ひとまずはCodeIgniterをダウンロードします。Bootstrapと同じように、公式サイトから
CodeIgniterのファイル一式をダウンロード。
※この時はver.3.1.4でしたが、今後も方法は変わらないでしょう。
中身を見るとこんな感じでした。
沢山ファイルがありますね。
applicationフォルダには以下の物が入っています。
ここがいわゆる「書いたプログラムを置いていく場所」になります。
そしてここは「MVCフレームワーク」のカタチをしていることが見て取れます。
MVCフレームワークについては後々調べていただければよいですが、要は
- ユーザーからのアクセスや入力を”コントローラー(C)”が受取り、
- “コントローラー(C)”は入力されたデータに対応した”モデル(M)”を呼び出し、
- “モデル(M)”はデータの取得、加工を行い、”コントローラー(C)”に加工済みデータを返す。
- “コントローラー(C)”は受け取ったデータを、”ビュー(V)”に渡し、
- “ビュー(V)”は受け取ったデータからHTMLを生成し、”コントローラー(C)”に返す。
- “コントローラー(C)”は最後にそのHTMLを画面に表示しおわり。
と言った流れを取るものですね。それぞれの役割がしっかり分かれているので、動きを把握しやすそうです。
- CodeIgniterはダウンロードして中身一式を置くだけでOK
- 自分で書くプログラムは「application」フォルダに配置する
- SystemフォルダはCodeIgniterが持つ沢山の機能が入っている。基本触らない
index.phpを覗いてみよう
はじめに用意されてあるindex.phpを覗いてみると沢山のコメントとプログラムがありますが、
この中でとても大事なものが一つだけ入っています。
それはこの部分。
1 |
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); |
この’development’と書かれている所を変えることで、「開発モード」「本番モード」と異なるモードに変身させられます。
コマンド | 役割 | 出来ること |
---|---|---|
‘development’ | 開発者モード | 500エラー発生時、場所/エラー内容を全て表示する |
‘production’ | 本番モード | 何かのエラーが出ても”An Error was occurred”と出てくるだけになる |
本番環境に挙げる時は、うっかりエラーでプログラムの中身を見られることのないよう、productionに書き換えておきましょう。
モデルからデータを受取り、ビューがHTMLを生成する流れを実現してみたい
では早速、静的なページですが、MVCフレームワークっぽいことをしてどういう動きをするかやってみたいと思います。
まずはapplicationフォルダの「controllers」内に”Test.php”というコントローラーを作ります。
そして中身はこんな感じにしておいてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Test extends CI_Controller { public function index() { //モデルの読み込み $this->load->model('Default_model_test'); //モデル内のメソッド"get_testdata"を実行し、値をもらう $arr_data['tax_list'] = $this->Default_model_test->get_testdata(500); //viewsフォルダにあるviewファイル"default_test.php"を呼び出す //渡したいデータが有る時は第2引数に置く $this->load->view('default_test', $arr_data); } } ?> |
ここではモデルを読み込み、データを貰ってビューを指定してそのデータを渡す処理を行っています。
viewに値を渡す時は、基本的に一つの配列にしてまとめて渡します。
続けてデータの取得や加工を行うmodel部として、modelsフォルダ内に”Default_model_test.php”を作ってください。
本来はデータベースを使うための所作があるのですが、今回はデータの流れを把握するため、データベースを使わずにいきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php class Default_model_test extends CI_Model{ function Default_model_test(){ } //実際に呼び出すメソッド function get_testdata($price = 100){ //受け取った値に税をプラスした値を配列に入れる $tax_list = array( 'old_tax' => $price * 1.05, 'now_tax' => $price * 1.08, 'new_tax' => $price * 1.10 ); return $tax_list; } } ?> |
最後にビューの作成です。viewsフォルダに”default_test.php”を作ってください。
中身は受け取ったデータをテーブルで表示するだけのものです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>テスト</title> </head> <body> <table> <? foreach($tax_list as $key => $value){ ?> <tr> <td><?=$key?></td><td><?=$value?></td> </tr> <?}?> <table> </body> </html> |
ここで気をつけなければいけないのはviewに配列で渡した変数の段階が1段階下がるということです。
コントローラーでは$arr_data[‘tax_list’]として渡していた変数が、ビューでは$tax_listとして扱われます。
これは全部の変数に$arr_data$arr_data…と書かなくても良いように、CodeIgniter側で自動変換しているためです。
後は設定の変更です。
“config”フォルダにある”routes.php”を開き、次の変数の値を変更してください。
1 |
$route['default_controller'] = 'Test'; |
これでデフォルトでTestコントローラが開くようになります。
このプログラムの流れは
- “Test”コントローラーにアクセス。index()メソッドが自動的に実行
- “Default_model_test”モデルを読み込む
- “Default_model_test”モデル内のget_testdata()メソッドを実行。引数として500を渡す
- get_testdata()メソッドが引数に税金を足した値を$tax_listとして”Test”コントローラーに返す
- “Test”コントローラーは返ってきた値を$arr_data[‘tax_list’]に格納
- “default_test”ビューを指定し、$arr_dataを乗せて実行
となっております。
実行結果はこんな感じになりました。無事値も渡っていますね。
終わりに
今回はCodeIgniterを適用して、MVCフレームワークに則りデータを実際に受け渡ししながら
実行の様子を確かめることが出来ました。
CodeIgniterはデータベースの扱いもしやすく、特定の場所に設定ファイルを置くだけで
初期ロードも自動でやってくれたりもします。
他にもたくさん機能があったり、CodeIgniterを動かす上で欠かせないものもあるのですが、
全部記述すると小冊子が出来上がりそうなので、今回は超初心者向けということで、フレームワークを使うと
どんな利点があるのか、普通に生PHPで書くよりどう見やすくなるのか。
そしてフレームワークを導入したけど、最初何すればいいの…となっている方にとって手に取りやすい
記事になっていればと思っています。
ディスカッション
コメント一覧
まだ、コメントがありません