top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_942

symfony:データモデルの実装に入るぞ。今日から、バリバリ書き始める・・・ 【symfonyで、企業サイトを創る】

 2009-05-29
引き続き・・・
この作業の時間を取る。

 ・symfony を初めて使っていきなり
  企業サイトを構築する
  (あれっ? タイトル変わったような!?)


とにかく、now旬なプロジェクト。
今の仕事に関係しているから、ね。
え? 学びながら大丈夫かって。
いや、かなりプライベートに近いから。はは。


  追記に ▼


※この連載は、はじめて「symfony」に取り組んだmetaboyが、
 いきなり、企業サイトをこれで創ってしまお、という企画。
 参考にするチュートリアルは、
 ◆Practical symfony | Web PHP Framework
  本日:3日目: データモデル
  前回:はこちら

FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎ symfonyで、企業サイトを創る:4回目
  ・チュートリアル:02
************************************************


 /*------------------------------------------*/
  ●3日目: データモデル:ポイント
 /*-------------------------------------------*/
   □データベースとインタラクトするために
    ORMを使い、アプリケーションの最初のモジュールをビルド
    【ORM】:オーアールマッピング (Wikipedia
      ・オブジェクト指向言語におけるオブジェクトと、
       リレーショナルデータベースにおけるレコードとを
       対照させること

   ■リレーションモデル
    ER図を考える
    【ER図】:entity-relationship diagram (Wikipedia
      ・概念データモデルを描く
       ・「意味的な集まり」を「エンティティ」と呼び、
        「グループ間の関連付け」を「リレーションシップ
        と呼ぶ。


    さて、「ER図」というものを作成する際、みなさんは
    何を使って作られるのだろう?
    Powerpoint や Excel、Visio いろいろと
    あると思うけれど、私は、このツールを使い出して
    もう、他のツールは使えない。
    (ご存知だとは思うけど)
    ここまで出来て! のオープンソース。

DBDesigner 4
 ( by VENTURE VIEW )
DBDesigner 4 もちろん
 ・日本語化されている
  プロジェクトもあり、
 ・現在は、DBDesigner 4自体は
  開発は終了しているらしいけど
  ・DBDesigner 4Fork として
   新しく続いているらしい・・・




 現在すでにあるデータベースに接続して
 「リバースエンジニアリング」という形で
 情報を取得、自動的にER図を作ってくれて
 これ以上、何を望めるだろう・・・


    で、この「DBDesigner 4」を使って、
    ・ER図 を考えてゆく。


     ひとまずこんな感じだ。
     ER図 を考えてゆく
     ・サイトに
      ・基本的な Whatsnew を用意し
       それ以外に
      ・(特定の)顧客用の掲示板(BBS)を
       用意する。

    ・[created_at]:レコードが生成されたとき
       現在のシステム時刻を値としてセット
    ・[updated_at]:レコードが更新されると
       システム時刻をセット


   ■スキーマ
    リレーショナルデータベースの情報は
    オブジェクトモデルとしてマッピングされる必要
    【Propel】:Ja/WikiStart Propel(日本語サイト)
      ・PHP5 専用のオブジェクト関係マッピング
        Object-Relational Mapping
        (ORM)フレームワーク
     ※symfony にバンドルされている。


     ・チュートリアルでは、手書きで最初のスキーマ
      ファイルを記述してゆく方法が説明されているが、
     (私は)同じく紹介されている、
     ・DBDesigner 4 の定義XMLファイルから
      Propel用のスキーマファイルを出力してくれる
      Webサービス:DB Designer 4 TO Propel Schema Converter
      を利用する。


      □DB Designer 4 で生成されたXMLファイルをペーストして
       XMLファイルをペースト
        ▼
       Propel用のスキーマファイルを出力
       ※スキーマファイル が出力される。
        これは、保存しておく。

     ・チュートリアルでは、手書きで YAMLフォーマット
      のものを作成する手順があるが、私は、DBDesigner 4
      を利用して、


      □まず、対象のデータベースを
       phpMyAdmin を利用して作成後、


      □今回作成したER図から、
       ・SQL文をエクスポート
        (「クリップボードへコピー」)し
      □phpMyAdmin の SQLに貼りこんで、
       phpMyAdmin の SQLに貼りこんで
       テーブルを作成した。
       テーブルを作成した

   ■データベース
    symfonyフレームワークがサポートするDBのうち、
    チュートリアルと同じく、MySQLを利用する。
    ・SSHで接続後、今回のプロジェクトディレクトリに移動
    ・bash した後、


$ symfony configure:database "mysql:host=localhost;dbname=*****" (ユーザー名) (パスワード)

     > (プロジェクトフォルダ)/config/databases.yml
       が生成された。
dev:
propel:
param:
classname: DebugPDO
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: 'mysql:host=localhost;dbname=*****'
username: *****
password: *****
encoding: utf8
persistent: true
pooling: true

    先の「スキーマ」のところで、
    ・DBDesigner 4 を利用してできた
     xmlファイルから、
     ・Webサービス:DB Designer 4 TO Propel Schema Converter
      これを利用して生成された、スキーマ(XML)を
      ・schema.xml として


     ・サイト上の
      (プロジェクト)/config/ 内に保存しておく。


    その上で、
$ symfony propel:build-sql

     > >> propel Running "sql" phing task
       と表示され、
      (プロジェクト)/data/sql/ 内にファイルが生成された。
      ・チュートリアルで説明あるとおり、最適化された
       「テーブルを生成するための」SQLステートメントだ。
       「テーブルを生成するための」SQLステートメント
       ※DROP TABLE IF EXISTS 付だ。
      ・これを実行する際は、
$ symfony propel:insert-sql

        ※DROP TABLE IF EXISTS 実行の確認メッセージを
         消すには、
$ symfony propel:insert-sql --no-confirmation

    【オブジェクトにマッピングしたPHPクラス】
      ※これを生成しておこう。


$ symfony propel:build-model

     > >> propel Running "om" phing task
       >> autoload reloading autoloading
       と表示され、
      (プロジェクト)/lib/model/ 内にファイル群が生成された。
       オブジェクトにマッピングしたPHPクラス

     ・Propelはテーブル単位で4つのクラスを生成する
      (例)
      ・Client: テーブルの単独のレコードを表し、
        デフォルトではこのクラスは空


<?php
class Client extends BaseClient
{
}
        ・・・lib/model/以下
      ・BaseClient: 親クラス。
        propel:build-modelを実行するたびに、
        このクラスはオーバーライドされる
        ・すべてのカスタマイズはClientクラスで
        ・・・lib/model/om/以下
      ・ClientPeer: Clientオブジェクトの
        コレクションを返す
        スタティックメソッドを定義
        デフォルトではこのクラスは空
<?php
class ClientPeer extends BaseClientPeer
{
}
        ・・・lib/model/以下
      ・BaseClientPeer:: 親クラス。
        propel:build-modelを実行するたびに、
        このクラスもオーバーライドされる
        ・すべてのカスタマイズはClientPeerクラスで
        ・・・lib/model/om/以下

     そして、これらを次のように利用するわけだ。
     (チュートリアル:転載)


$client = new Client();
$client->setPosition('Web developer');
$client->save();
echo $client->getPosition();
$client->delete();
        ・・・モデルオブジェクトで操作
$category = new Category();
$category->setName('Programming');
$bbs = new bbs();
$bbs->setCategory($category);
        ・・・直接リンクする外部キーを定義

     ●symfonyはPHPクラスをオートロード


      (開発者のために自動でやってくれる)
       [ 注意! ]
        ・symfonyに新しいクラスを追加したときは
         キャッシュをクリアする必要がある
$ symfony cache:clear

     ●symfonyタスクは名前空間とタスクの名前で構成


      短縮名
      ※個人的には、あまり短縮名は使わないが、一応
       ある、ということは知っておく必要がありそう・・・
$ symfony cache:clear
symfony cache:cl
symfony ca:c
symfony cc
        ・・・すべて同じ。

   ■初期データ
    これで、データベース準備ができ、
    接続のための初期クラスも用意できた・・・わけだ。
    ・3種類のデータ


    
 ・初期データ
   ・アプリケーションを動作させるのに必要なデータ
    今回では、カテゴリデータ(Category)
 ・テストデータ
   ・アプリケーションのテストに必要
    テストを動かすたびにテストデータで
    データベースをきれいにする必要
 ・ユーザデータ
   ・アプリケーションが普通の状態

    ・symfonyがデータベースのテーブルを作成するたびに、
     すべてのデータは失われる。
    ・初期データを持つデータベースを投入する為、
     symfonyを使ったベターな方法を用意
     ・data/fixtures/ディレクトリにYAMLファイルを作り
      データベースでそれらをロードするために
       propel:data-loadタスクを使用。

    OK ・・・と思ったけど、
      このタスクが、さくらで使えない? > ×
      実行すると、


Unable to open PDO connection [wrapped: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)]
        ・・・すべて同じ。
      ※仕事の合間を縫って、半日格闘
       銃砲いろいろ探したけれど未解決。
       う~む。

    今日は、
    ・チュートリアル3日目
     終えることができなかった。


    まぁ、途中、かなり「DBDesigner 4」に時間を割いたのだが。
    しかしほんと、これ毎回1時間
    では無理でしょ。


 ではまた明日・・・

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/942-f4017bb8
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

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