順調に Aria III の設計が進んでいます。
描いている構想を、機能ごとに分けて、
レイアウトを考えて、
データベースのテーブル構造を考えないといけないです。
とりあえず、基本となるページの構造は完成しました。
ヘッダーファイル、フッターファイル、
CSS ファイルなどを分けつつ、
Zend Framework で動かせられるようになりました。
今年の 5 月くらいにも Zend Framework の勉強をしていたのですが、
いまいち、オブジェクト指向プログラミングとか
フレームワーク の MVC とか言ったものが理解できていませんでした。
仕事の関係で、EC CUBE (オープンソースのショッピングシステム) などを
カスタマイズする機会があり、それに触れているうちに
オブジェクト指向とかフレームワークってものが
良く分かるようになりました。
その甲斐もあって、今では自分でも驚くほど
Zend Framework の仕組みがよく分かります。
勉強してみて初めて分かりましたが、
この本はあまり良くないです。
まぁ入門書だから、わかりやすくするためだから仕方ないと言われれば
そうかもしれないのですが、プログラムの組み立て方が変です。
例えばデータベースの接続情報のような
サイト内のどこでも使いそうな情報は
フロントコントローラに書くべきだと思います。
が、この本では色んなファイルの先頭に
同じ接続情報を書いてたりします。
私も Zend Framework の駆け出しで
理想のコードの書き方というものは分かりませんが、
自分なりに模索して、開発速度とメンテナンス性の高い
サイトを作り上げていきたいと思います。
色々なサイトや本などを参考にして調べながら、
このように初期設定ファイルを書いてみました。
【index.php】
<?php
/**
* index.php
*
* フロントコントローラー
*
* LICENSE: Miracle Maple by Mirage is licensed
* under a Creative Commons 表示-非営利-継承 2.1 日本 License.
*
* @category Miracle Maple
* @package index
* @version $Id:$
* @link http://www.maple-aria.com/
* @since File available since Release 1.0.0
* @copyright Copyright (c) 2008 未来樹
* @license http://creativecommons.org/licenses/by-nc-sa/2.1/jp/ Creative Commons BY-NC-SA
*/
// Zend Framework の読み込み
$ZEND_DIRECTORY = 'D:/Users/Mirage/Documents/Websites/Aria3/class/library/';
set_include_path(get_include_path() . PATH_SEPARATOR . $ZEND_DIRECTORY);
require_once 'Zend/Config/Ini.php';
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Db/Table/Abstract.php';
require_once 'Zend/Layout.php';
require_once 'Zend/Loader.php';
/**
* Maple_Index
*
* ブートストラップクラス
*
* 各種設定情報のロードと初期化および
* フロントコントローラーのセットアップ
*
* @version Release: @package_version@
* @link http://www.maple-aria.com
* @since Class available since Release 1.0.0
* @copyright Copyright (c) 2008 未来樹
* @license http://creativecommons.org/licenses/by-nc-sa/2.1/jp/ Creative Commons BY-NC-SA
*/
class Maple_Index
{
private $app_root = $_SERVER['DOCUMENT_ROOT'] . '/application';
/**
* フロントコントローラーのセットアップ
*
* ホスト名から自動的に環境を判別する。
* @return string
*/
public function __construct()
{
// データベース設定
$datasource = new Zend_Config_Ini($this->doc_root . '/library/config.ini'),
'datasource');
$db = Zend_Db::factory($datasource->database);
$db->setFetchMode(Zend_Db::FETCH_ASSOC);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$db->query("SET NAMES 'utf8'");
// レイアウト設定
$layout = Zend_Layout::startMVC($this->doc_root . '/layout');
// モデル設定
set_include_path(get_include_path() . PATH_SEPARATOR . $this->app_root . '/modules/default/models');
Zend_Loader::registerAutoload();
// フロントコントローラ設定
$front = Zend_Controller_Front::getInstance()
->addModuleDirectory($registry->get('MODULE_PATH'))
->setParam('IMAGE_PATH', '/library/image')
->setParam('CSS_PATH', '/library/css')
->setParam('JS_PATH', '/library/js')
->dispatch();
}
}
// アプリケーションの起動
$bootstrap = new Maple_Index();
?>