2013/10/11

CakePHPを使ってPHP開発を高速化する方法

CakePHPを使ってPHP開発を高速化する方法

PHPのフレームワークとはあらかじめ必要であろう機能を組み込んだシステムの事です。
フレームワークを使う事によって、よく使う機能を何度も開発する手間が省けます。
今後PHPでシステムの開発を行っていくのなら必ず必要になってきますので、今回はその中でも有名なCakePHPをご紹介します。

目次

CakePHPのインストール方法

CakePHPを導入するにあたって、特に難しい設定などは何もありません。

CakePHP公式サイト(http://cakephp.jp/)

CakePHP公式サイト

本体の最新版をダウンロードして、PHPが動いているサーバーにアップロードするだけで使えます。
圧縮されているので、解凍したものを適当なフォルダに入れてからアップロードして下さい。

今回は「cakephp」というフォルダに入れました。

CakePHPには必要なものがすべて揃っているので後で必要な機能のライブラリを追加するなんて事もありません。

CakePHPのトップ画面

サーバーにアップしたフォルダにアクセスしてみると以下のようなページになります。

CakePHP初期画面

CakePHPのメッセージは英語なので分かりづらいかもしれませんが、警告レベルを背景色で表してくれています。
信号と同じで赤背景は警告、黄色は注意、緑は問題なし、です。

画像の上の二つの警告は「デフォルトのままではセキュリティが弱いです」という内容です。

MVCモデル

CakePHPではMVCモデルというアーキテクチャを導入しています。

MVCモデルとは

  • Model(モデル「データベースへとの連携」)
  • View(ビュー「表示」)
  • Controller(コントロール「処理」)

それぞれの仕様の変更が他の機能に影響を及ぼさないよう、独立させて作るという考え方です。

基本的にはコントロールにすべての処理を書いて、そこから表示に関するものをビューへ、データベースに関するものをモデルへと切り離します。

コントローラーのサンプルプログラム

コントローラーを使うサンプルコードです。

※SampleController.php

<?php
App::uses('AppController', 'Controller');
class SampleController extends AppController {
    public function index() {
        $this -> autoRender = false;
        echo "<html><head></head><body>";
        echo "<p>サンプルページ</p>";
        echo "</body></html>";
    }
}

ここでまず重要なのがファイル名です。

SampleController.php(アプリケーション名+ Controller.php)

のようにアプリケーション名の一文字目を大文字にして後は小文字にします。
プログラムが判断できるようにファイル名命名の規則にしたがって名前をつけます。

ソースコードの解説

2行目

App::uses('AppController', 'Controller');

App:uses」はCakePHPに用意されているライブラリをロードするためのものです。
Controller」パッケージにある「AppController」というクラスをロードします。

3行目

class SampleController extends AppController {

class コントローラー名 extends AppController
コントローラー名を記述します。

4行目

    public function index() {

public function アクション名()
アクション名を付けます。
今回はデフォルトのアクション名であるindexと付けます。

5行目

        $this -> autoRender = false;

ビューによる画面表示をOFFにする、という記述です。
本来なら画面表示はビューが担当しますが、今回はコントローラーで表示させます。

6~8行目

        echo "<html><head></head><body>";
        echo "<p>サンプルページ</p>";
        echo "</body></html>";

実際の処理内容です。

このファイルを「utf-8n」で保存して先ほどアップロードしたフォルダ(今回はcakephpフォルダ)の/cakephp/app/Controllerにアップロードします。

/cakephp/sampleにアクセスしてこのコントローラーを実行すると

CakePHPサンプルコード実行画面1

と表示されます。

これは指定のアクションアドレスにアクセスがあったのでその処理を実行した結果です。

アクション名がindexの時はアクション名を省略できます。

ビューのサンプルプログラム

ビューを使うサンプルコードです。

※index.ctp

<html>
    <head>
    </head>
    <body>
        <h1>テストページ</h1>
        <p>nameは「<?php echo $name;?>」です。</p>
    </body>
    </html> 

このビューを使うために前項のコードを以下に書き換えて下さい。

※SampleController.php

<?php
App::uses('AppController', 'Controller');
class SampleController extends AppController {
    public function index() {
        $this->set("name","田中");
    }
}

app」フォルダ内の「View」フォルダの中にアプリケーション名のフォルダ「Sample」を作成します。

そのフォルダ(「Sample」)内にコントローラーのアクションごとに「アクション名.ctp」という名前でファイルを作成します。

そのファイルにビューの処理を記述します。

上記のサンプルファイルをそれぞれアップロードした後

/cakephp/sampleにアクセスすると以下のように表示されます。

CakePHPサンプルコード実行画面2

SampleController.phpの5行目の記述で$name変数に"田中"を代入しています。

この変数はビューでも使用できます。

上下に自動でレイアウトが入りますがコントローラーに

$this->autoLayout = false;

と記述すると、この機能をオフできます。

フォームの値を取得する

フォームで入力された情報は$thisの「data」というプロパティに格納されます。

<input type="text"name="usagi">

の値を取得する場合は

$this->data["usagi"]

という形で取り出せます。

CakePHPには入力されたデータをサニタイズするメソッドも用意されています。
(サニタイズとはシステムに悪影響を及ぼす可能性のあるコードを無効化する事です)

モデルのサンプルプログラム

CakePHPではMySQLなどのデータベースとのやりとりはモデルで処理します。

設定ファイルを設置

※app/Config /database.php

<?php 
class DATABASE_CONFIG {
     public $default = array(
        'datasource' => 'Database/Mysql', 	//使用するデータベース
        'persistent' => false, 	//接続を繋ぎっぱなしにしない
        'host' => 'localhost', 	//ホスト名
        'login' => 'root', 	//ユーザー名
        'password' => '', 	//ログインパスワード
        'database' => 'MySampleData', 	//データベース名
        'encoding' => 'utf8'	//文字コード
    );
}

それぞれの値を入力してデータベースにアクセスできるようにしておきます。

Modelクラスを用意する

※app/Config/MySampleData.php

<?php
App::uses('AppModel', 'Model');
	class MySampleData extends AppModel {
}

コントローラーで実際にデータを取得する

※app/Controller/MySampleDatasController.php

<?php
App::uses('AppController', 'Controller');
class MySampleDatasController extends AppController {
    function index(){
        $datas = $this->MySampleData->find('all');
        $this->set('datas',$datas);
    }
}

これで$datasにデータベースのデータが格納されました。
データは配列になっており

$datas[列番号][モデル名][テーブルの項目名]

というようにそれぞれの値が格納されています。

その他の機能

CakePHPには「bake」というアプリケーションの基本部分を自動生成してくれる機能があります。

bakeで生成されたシステムは、そのまま使えるレベルではありませんが、それをカスタマイズしていく事によって開発の時間の短縮になります。

他にはフォームを自動生成してくれる「FormHelper」などがあります。

これらの機能は使いこなせるようになるまで時間がかかり、最初の内は手作業で入力した方が早いかもしれません。しかし使いこなせるようになれば必ず作業が効率化しますので是非使って見て下さい。

まとめ

まだまだ魅力をお伝えしきれていませんが、このようにCakePHPを使うとPHPの知識があまりなくてもWebアプリを開発する事ができます。

しかし自由なカスタムをするためにもPHPの知識も身につけておきましょう。