スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Zend_ApplicationでDB、セッション、ログの準備

Zend_Applicationを使ってDB、セッション、ログを準備してみます。
なるべくZend_Applicationの仕組みを利用したかったのですが、DBを使うログはうまく設定できませんでした。
ここだけ、手動で準備しています。
セッションもログもDBを使用します。定義は以下の通りです。

CREATE TABLE t_log
(
log_id bigserial NOT NULL,
message text,
priority integer,
ins_ts timestamp with time zone,
CONSTRAINT t_log_pkey PRIMARY KEY (log_id)
);

CREATE TABLE t_session
(
session_id text NOT NULL,
modified integer NOT NULL,
lifetime integer NOT NULL,
data text,
CONSTRAINT t_session_pkey PRIMARY KEY (session_id)
);

まず、テンプレートとなるファイルを自動生成します。
解凍したZendFrameworkの中のbinフォルダにzf,sh, zf.bat, zf.phpという自動生成するツールがあります。
Webアプリケーションを作成したいフォルダを作って、そこに移動します。
そして、コマンドを実行します。

mkdir myapp
cd myapp
zf.sh create project

Webの設定ファイルを編集します。最初の二行を追加しています。開発環境であることを指示しています。
myapp/public/.htaccess

SetEnv APPLICATION_ENV development
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

アプリケーションの設定ファイルを編集します。
ログの設定以外はZend_Applicationの方式に従っています。
myapp/application/configs/application.ini

resources.frontController.params.displayExceptions = 0
resources.db.adapter = "pdo_pgsql"
resources.db.params.host = "localhost"
resources.db.params.username = "user"
resources.db.params.password = "pass"
resources.db.params.dbname = "test"
resources.db.isDefaultTableAdapter = true
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 864000
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "t_session"
resources.session.saveHandler.options.primary = "session_id"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
resources.session.saveHandler.options.lifetime = 864000
logger.writerName = "Db"
logger.writerParams.table = "t_log"
logger.writerParams.columnMap.message = "message"
logger.writerParams.columnMap.priority = "priority"
logger.writerParams.columnMap.ins_ts = "timestamp"
logger.filterName = "Priority"
logger.filterParams.priority = 6

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
logger.filterParams.priority = 7

次は、実際に準備する部分です。
myapp/application/Bootstrap.php

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
// DB初期化
protected function _initDb()
{
$resource = $this->getPluginResource('db');
$db = $resource->getDbAdapter();
Zend_Registry::set('db', $db);
Zend_Db_Table::setDefaultAdapter($db);

// ログの初期化
$loggerOption = $this->getOption("logger");
$loggerOption['writerParams']['db'] = $db;
$logger = Zend_Log::factory(array(
$loggerOption
));
Zend_Registry::set('logger', $logger);
}

// セッション初期化
protected function _initSession()
{
$resource = $this->getPluginResource('session');
$resource->init();
$session = new Zend_Session_Namespace('Default');
Zend_Registry::set('session', $session);
}
}

セッション、DB、ログを実際に使いたい時はZend_Registryを使います。

$db = Zend_Registry::get('db');
$session = Zend_Registry::get('session');
$logger = Zend_Registry::get('logger');

細かいパラメーターの詳細はZend_Application, Zend_Session, Zend_Db, Zend_Logを参照してください。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。