PHPの外部システムとCakePHPのModelを連携させる

WordPressでCakePHPのModelのみを使いvalidateする方法

CakePHP 2.5.4とWordPress 4.0を連携させる

WordPressの固定ページにフォームを作成して、そのフォームでサーバサイドバリデーションを行う。

WordPressのバリデーション機能を利用した場合、エラーデータを効率的に利用できなかったり、条件分岐が複雑なコーディングになってしまったりするので、外部システム(WordPress)のModel部分を補強するためにCakePHPのModelを利用する。

CakePHP側の設定

CakePHPのModelを利用したいので、DispatcherでControllerとActionを呼び出している部分をコメントにする。

app/webroot/index.php

の以下の部分をコメントにする。

App::uses('Dispatcher', 'Routing');

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
	new CakeRequest(),
	new CakeResponse()
);

上のコードを無効にすることで、bootstrap.phpやcore.phpなどの設定ファイルは有効なままCakePHPをロードすることが可能。

データベースの接続情報を別途CakePHP側で設定していく必要があるので、database.phpを作成しておく。

PHPの外部システム側の設定

本記事では、PHPの外部システムとしてWordPressを前提にして、CakePHPのModelを利用してみます。最初に、外部システムのイニシャルファイルで、カスタマイズされたCakePHPのindex.phpを読み込みます。

WordPressの場合は、WordPressのルートディレクトリにCakePHPのファイル一式を配置します。

wordpress-cakephp-integration

WordPressのwp-config.phpでCakePHPのindex.phpを読み込みます。

require_once(ABSPATH.'cakephp/app/webroot/index.php');

wp-config.phpの最後に上の一行を追記します。

ここまでの設定で外部システム(WordPress)からCakePHPのModelを利用可能な状態なりました。

WordPressでCakePHPのModelを使う

データベースに

contactsテーブル

が存在し、お問い合わせフォームから受け付けた情報を保存するテーブルを対象にModelをコーディングします。

cakephp/app/model/contact.php

を作成し、以下の通りコーディングします。

class Contact extends AppModel {
  public $name = 'Contact';
  public $validate = array(
    'email'=>array(
      'rule' => 'notEmpty',
      'message'=>'メールアドレスを記入してください。'
    ),
    'title'=>array(
      'rule' => 'notEmpty',
      'message'=>'件名を記入してください。'
    ),
    'body'=>array(
      'rule' => 'notEmpty',
      'message'=>'問い合わせ内容を記入してください。'
    )
  );
}

CakePHPのModelなので、100%CakePHPのノウハウを流用することができます。

Modelが作成できたので、アプリケーション側から利用してみます。WordPressのfunctions.phpでCakePHPのModelを使ってデータのバリデーションを行います。

// CakePHPのベースモデルとContactモデルをuseする
App::uses('AppModel', 'Model');
App::uses('Contact', 'Model');

// Contactモデルの作成
$c = new Contact();

// 空のダミーデータの定義
$data = array(
  'email' => '',
  'title' => '',
  'body' => ''
);

// ダミーデータをセット
$c->set($data);

// バリデーション実行
if( $c->validates() )
{
  // バリデーションがOKならデータベースの登録処理を行う
}

else
{
  // エラー情報の格納
  $errors = $c->validationErrors;
}

上のコードを実行すると、ダミーデータが空になっているため、以下のデータ構造で$errorsにエラーメッセージが格納されます。

array(3) {
  ["email"]=>
  array(1) {
    [0]=>
    string(51) "メールアドレスを記入してください。"
  }
  ["title"]=>
  array(1) {
    [0]=>
    string(36) "件名を記入してください。"
  }
  ["body"]=>
  array(1) {
    [0]=>
    string(51) "問い合わせ内容を記入してください。"
  }
}

このデータは、WordPressのフロント側で利用することができます。

CakePHPをフルスタックなサーバサイドMVCフレームワークとしてだけでなく、高機能なCakePHPのModelだけを外部システムから連携して利用することで、PHPで構成された外部システムのサーバサイドバリデーションを効率的に開発することが出来るようになります。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PHPの外部システムとCakePHPのModelを連携させるの記事にコメントを投稿

Validate