SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

Zend Framework入門(7):抽象化レイヤによるデータベースアクセス手法 - Zend_Db(後編) -

Zend Frameworkによる実践的なPHPアプリケーション開発 7

  • X ポスト
  • このエントリーをはてなブックマークに追加

モデルとしての利用例

 Permissionsクラスを使い、テーブルクラスをMVCのモデルとして利用する例を取り上げます。ここでは単純にmember_id=1、room_id=1のレコードを対象として、term列を入力された値に書き換える結果を見ることにします。

 フロントコントローラindex.phpはmvc_sampleフォルダに置くことにしました。

mvc_sample/index.php
<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('../controllers');

 同じフォルダに.htaccessファイルを配置します。Windows環境でファイル名の頭文字に「.」が使えずファイル名を変更する場合は、Apacheのhttpd.confの設定もあわせる必要があります。内容は次のようにします。

mvc_sample/.htaccess
RewriteEngine on
RewriteBase /table_sample/mvc_sample
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

 2行目でドキュメントルートからのmvc_sampleフォルダのパスを指定します。この例ではmvc_sampleフォルダをtable_sampleフォルダの下に配置しています。

 次にアクションコントローラIndexController.phpをcontrollersフォルダへ配置します。このファイルでは、入力画面を表示するindexと更新を行い、結果を表示するupdateの2つのアクションのメソッドを定義しています。

controllers/IndexController.php
<?php
require_once 'Zend/Controller/Action.php';
require_once '../table_sample_init.php';

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }

    public function updateAction()
    {
        $req = $this->getRequest();
        $new_term = $req->getPost('new_term');

        $permission = new Permissions();
        try {
            // 入力された値で更新を行います
            $permission->update(array('term' => $new_term),
                                'member_id = 1 and room_id = 1');
            // 新しい期限の値をビューで使えるようにします
            $row = $permission->find(1, 1)->current();
            $this->view->assign('new_term', $row->term);
        } catch (Exception $e) {
            // 例外が発生した場合、error.phtmlを表示します
            $this->render('error');
        }
    }
}

 Permissionsテーブルに入れるデータのチェックは、Permissionsクラスのupdateメソッドが行っています。そのため、updateActionメソッドに入力データのチェックを行うコードを書く必要がなく、すっきりしたものになります。

 なお、このコードでは例外をすべて一括して扱っています。そのためPermissionsクラスの_check_termメソッドが例外をスローするほかに、日付として扱えない文字列を指定したためupdateメソッドが例外をスローしても同じ失敗扱いになります。

 最後にビューをviews/scripts/indexフォルダに配置します。今回は入力画面、更新成功画面、更新失敗画面の3つを用意しました。

views/scripts/index/index.phtml
<html>
<head>
<title>入室許可期限の更新</title>
</head>
<body>
<form action="Index/update" method="post">
期限<?php echo $this->formText('new_term', '2030-3-31')?>
<?php echo $this->formSubmit('','更新')?>
</form>
</body>
</html>
views/scripts/index/update.phtml
<html>
<head>
<title>更新結果</title>
</head>
<body>
期限を
<?php echo $this->new_term;?>
に変更しました。<br />
</body>
</html>
views/scripts/index/error.phtml
<html>
<head>
<title>更新失敗</title>
</head>
<body>
期限の更新に失敗しました。<br />
</body>
</html>

 それではブラウザからmvc_sampleにアクセスしてみましょう。入力画面が表示されます。Permissionsクラスでチェックを行っている「日付が翌年度末までの期間に入っていること」という制限に合った値を入れるかどうかで結果が変わります。

入力画面
入力画面

まとめ

 今回はZend_Dbのテーブルクラスを作り、基本的な使い方とメソッドを追加してMVCのモデルクラスとして利用する例を取り上げました。次回からは、Zend FrameworkでMVCのビューを担っている、Zend_Viewについて解説していきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 川北 季(カワキタ ミノル)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2536 2008/06/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング