忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/07/26 15:46 |
Symfony-3日目

2日目は設計だけなのでスルーということで。


前回プロジェクトとアプリケーションを作りました。
今回はモジュールを作成します。

がその前に、とりあえずデータベースと接続アカウントを作成します。

CREATE DATABASE `jobeet` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `jobeet_dev` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'jobeet'@'localhost' IDENTIFIED BY 'jobeetpass';
GRANT ALL PRIVILEGES ON `jobeet` . * TO 'jobeet'@'localhost';
GRANT ALL PRIVILEGES ON `jobeet_dev` . * TO 'jobeet'@'localhost';



次に、O/RマッパをデフォルトのPropelからDoctrineに変更します。
何故Doctrineを選んだかって言われても特に深い意味はありません。

config/ProjectConfiguration.class.phpの

$this->enableAllPluginsExcept(array('sfDoctrinePlugin', 'sfCompat10Plugin'));

となっている行を

$this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin'));

に変更します。
見ての通り、sfPropelPluginとsfCompat10Plugin「以外を」使用する、という設定になります。
で、sfCompat10Pluginって何?

Doctrineを使用可能にするために以下のコマンドを実行します。
>php symfony cc
>php symfony plugin:publish-assets


Propelで使用していた以下のディレクトリ、ファイルを削除します。
web/sfDoctrinePlugin/
config/propel.ini
config/schema.yml
config/databases.yml


データベース情報を設定します。
>php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=jobeet" jobeet jobeetpass

config/databases.ymlが作成されるので、中身を編集します。
 

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=jobeet'
      username: jobeet
      password: jobeetpass
dev:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=jobeet_dev'
      username: jobeet
      password: jobeetpass


このようにすることで、index.phpからアクセスした場合はallの方のDBが、frontend_dev.phpからアクセスしてきた際はjobeet_devのDBが自動的に使われるようになります。

今後拡張子がymlのファイルがよく出てきますが、これはYAMLというデータ形式です。
スペースが意味を持つ形式なので、勝手にタブにしたりスペースを広げたりといったことはできません。
XMLのように面倒なタグなどを考える必要が全くないので、データを突っ込むのに非常に便利な形式となっています。


ということで次にYAMLでスキーマファイルを作成します。
http://www.symfony-project.org/jobeet/1_2/Doctrine/ja/03からconfig/doctrine/schema.ymlをそのままコピペ。

スキーマファイルとは要するにデータベースの設計図です。
これを書いておくと、DBからデータを読み込んだり逆に書き込んだりする際の助けになります。
それどころかDoctrineではスキーマファイルからCREATE TABLE文を作成してテーブルを自動作成したりといったことまで行うことができます。

というわけで一件便利なスキーマファイルですが、データベースの設計変更があった場合の修正が非常に面倒という問題があります。
自動作成コマンドだとテーブルの中身が綺麗さっぱり削除されたりするので運用開始後に設計変更とかが入ってきた場合どうにもならないんですよね。
この点、データベースからスキーマを取得してくるCakePHPとは真逆の思想です。

スキーマファイルの準備ができたら以下のコマンドを実行します。

>php symfony doctrine:build-model
>php symfony doctrine:build-sql
>php symfony doctrine:insert-sql


順にモデルを作成するコマンド、テーブルを作成するSQLを作成するコマンド、SQLを実行してテーブルを実際に作成するコマンドになります。

build-modelを実行すると、lib/model/doctrineディレクトリ内にテーブル毎にモデルファイルが作成されます。
これを編集することで、データの挿入や検索等をカスタマイズすることができるようになります。

最後に
>php symfony cc
としてキャッシュを削除し、作成したモデルを読み込むようにします。
これでスキーマとモデルが完成しました。


次にテストデータを登録します。
直接SQLを作成する必要はなく、スキーマ同様YMLファイルに記述しておき、それをコマンドで突っ込むことになります。
チュートリアルではこれがよい方法とか言っていますが、既存データを残しておきたい場合はどうするんだよといった疑問には答えてくれません。

data/fixtures/categories.ymlおよびdata/fixtures/jobs.ymlをそのままコピペ。
他に追加したいデータがあれば同じ形式で追加します。
といってもモデルオブジェクトとか意味がわかりませんが。

fixturesを保存した後、
>php symfony doctrine:data-load
を実行すると各YMLからデータを読み込んでデータベースに入れてくれます。
同時に該当のテーブルにそれまで蓄積されていたデータは全て消えます。

これだけやってようやくモデルの作成という下準備が終了しました。


モジュールを作成してみます。
>php symfony doctrine:generate-module --with-show --non-verbose-templates frontend job JobeetJob

jobeet_jobテーブルを閲覧、登録、更新、削除するモジュールができました。
ブラウザから
http://symfony.localhost/frontend_dev.php/job
とかそんなかんじでアクセスすると閲覧することができます。


どうなってるの?
さあ?


Symfonyの記事一覧

PR


2009/11/13 22:33 | Comments(1) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
まずDoctrineの検索条件から。 Doctrine::getTable(''JobeetJob'')->createQuery(''a'')->execute(); とするとjobeet_jobテーブルの内容が全て取得されます。 getTableでテーブル名を指定し、createQueryでエイリアス名を指定します。 このエイリアス名は作成されるSQLにも出力を扱う際にも全く関係が無く、Doctrine内でカラムやテーブルを扱う際にのみ利用されます。 最後にe...
弱小PHPerの憂鬱 | 2009/12/28 19:57

コメント

チュートリアルに詳しい説明が載ってないのでとても助かりました!
posted by yk110303 at 2013/06/10 21:45 [ コメントを修正する ]

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<買ったものリスト 2009/11/15 | HOME | ゲームレビュー:CLANNAD>>
忍者ブログ[PR]