読者です 読者をやめる 読者になる 読者になる

It's raining cats and dogs.

無駄なことなんてないはず

はじめてのCodeIgniter

PHP CodeIgniter

環境ができた。
で、まず初めにやることはやっぱしHello Worldでしょってことで、早速やってみる。

ディレクトリ構成の復習

今回のディレクトリ構成はこうしてる。hello_igniterってのがアプリ名だ。

~/htdocs/hello_igniter  # エントリポイント
~/var/apps/hello_igniter  # codeigniterの本体とかアプリのソースを置くところ

welcomeページが表示されていた

そういえば、前回環境を作ったときに

http://hogehoge/hello_igniter

ってURLでアクセスしたらwelcomeページが表示されていた。
これはなんで表示されているのか?
最近フレームワークMVCが一般的だ。modelがあり、viewがあり、controllerがある。
で、どのcontrollerのどのメソッドを呼び出すのかを定義するルーティング用の設定ファイルがあるものだ。
CodeIgniterも同様だ。
ならきっとwelcomeページを表示する設定がルーティングファイルにあるはずだ。
ルーティングファイルは

~/var/apps/hello_igniter/application/config/routes.php

だ。これを見てみる。ちなみに以下はめんどくさいので、アプリケーションのルートディレクトリに移動しておく。

% cd ~/var/apps/hello_igniter

さてファイルを見てみる。

<?php
$route['default_controller'] = "welcome";
$route['scaffolding_trigger'] = ""; 

と書いてある。おそらくdefault_controllerでデフォルトで呼ばれるコントローラを設定しているのだろう。
コントローラーはどこになるだろう?

application/controllers

だ。ここにwelcomeコントローラーがあるので見てみる。

% vi application/controllers/welcome.php
<?php

class Welcome extends Controller {

        function Welcome()
        {   
                parent::Controller();   
        }   
    
        function index()
        {   
                $this->load->view('welcome_message');
        }   
}

なるほど。
Controllerを継承したクラスを作ってコンストラクタでparent::Controller();を呼び出せばいいんだな。
コントローラーの作り方は何となくわかった。
function indexのクラスはデフォルトで呼ばれるメソッドだろう。
この中の$this->load->view('welcome_message');っていうところでview(画面のPHP)を呼び出している。
ではviewのファイルはどこにあるか

application/views

だ。でここに先ほど呼び出していたwelcome_messageのPHPがある。
みてみよう。

% vim application/views/welcome_message.php

ファイルの中は長いので割愛。環境構築したときのwelcomeページのHTMLが書いてある。
これでだいたいの流れはわかった。

HelloWorld的なものを作る。

ここまでの内容で、今回作るべきファイルは二つあることがわかった。controllerとviewだ。
以下の用にhello controllerとhello viewを作る。

% vi application/controllers/hello.php
% vim application/views/hello.php
コントローラー

application/controllers/hello.php

<?php

class Hello extends Controller {

        function Hello()
        {   
                parent::Controller();   
        }   
    
        function index()
        {   
                $this->load->view('hello');
        }   
}

特に処理をしないのでhello.phpというviewを呼び出すだけだ。

ビュー
<html>
<head>
<title>こんにちは</title>

</head>
<body>

<h1>Hello CodeIgniter</h1>

<p>はじめてのCodeIgniter</p>

</body>
</html>

単なるHTMLファイルだ。

確認してみよう。

今回作ったファイルはどういうURLで動作させるのだろうか?
welcomeページは

http://hogehoge/hello_igniter/

で動作することができた。
これはルーティングファイルでデフォルトコントローラーにwelcomeコントローラを呼び出す設定をしてあったからだ。
設定していない場合は

http://hogehoge/hello_igniter/コントローラー名/メソッド名

でアクセスできるとのことなので

http://hogehoge/hello_igniter/hello/index

でアクセスできるのだろうかと思ったらページが見つからないと怒られる。
どうやらCodeIgniterではデフォルトではエントリポイントのindex.phpもパスに混ぜないといけないらしい。
なので

http://hogehoge/hello_igniter/index.php/hello/index

となる。
実際確認できた。無事Hello Worldだ。
ちなみにこのindex.phpをとりたい場合は.htaccessとかでとる必要がある。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

な感じでrewriteさせるらしい。


長かった。
コード書くよりblog書くのに時間かかりすぎ。
きっとどこかで挫けると思います。
では。