2011/03/25

symfonyで掲示板作成(復習)

php講習 3/25

・作業の前に
vmwareを起動し、linux(CentOS)を立ち上げる
puttyでlinuxに一般ユーザでログイン、プロジェクトのディレクトリに移動
eclipseを起動
ブラウザを起動、Webテキストを開いておく


1時間目
今日、午前中は昨日の復習
プロジェクトbbs2のディレクトリをバックアップ(bk.bbs2)
ディレクトリbbs2作成
(1)プロジェクト作成
symfony init-project bbs2

(2)アプリケーション作成
$ symfony init-app front
$ symfony init-app backend
$ symfony init-app mypage

(3)各アプリケーションにデフォルトモジュール作成、アクセス確認
$ symfony init-module front default
$ symfony init-module backend default
$ symfony init-module mypage default
・アクセスで使うviewアクションを指定
/bbs2/apps/front/modules/default/actions/actions.class.php
/bbs2/apps/front/modules/default/templates/indexSuccess.php
/bbs2/apps/backend/modules/default/actions/actions.class.php
/bbs2/apps/backend/modules/default/templates/indexSuccess.php
/bbs2/apps/mypage/modules/default/actions/actions.class.php
/bbs2/apps/mypage/modules/default/templates/indexSuccess.php

(4)backend,mypage各ページに/区切りのURLでアクセス
・アクセスパスの調整
使ったコマンドは、実行の順番に並んでいないので注意!
$ mkdir backend
$ mkdir mypage
$ mv backend.php backend_dev.php backend
$ mv mypage.php mypage_dev.php mypage
$ cp .htaccess backend
$ cp .htaccess mypage
$ cd backend/
$ cd mypage/

$ vi .htaccess
$ vi backend.php
$ vi .htaccess
$ vi mypage.php

(5)レイアウトを昨日のソースを参照して作る。
Viewの説明
「レイアウトテンプレート」+「アクションで作成されるテンプレート」の組み合わせである
レイアウト
/bbs2/apps/front/templates/layout.php
CSS
/web/css/main.css
設定変更を反映する
$ symfony cc
・レイアウトとスタイルはメールで送付します。

(6)DBのアクセス情報を設定する
・DB定義
/bbs2/config/databases.yml
/bbs2/config/propel.ini

・schema.ymlを作成する
$ symfony propel-build-schema

・モデルファイルを作成する
$ symfony propel-build-model
bbs2/lib/modelにモデルファイルが作成されている

・DBアクセスし確認する
PHPファイル
$this->member = MemberPeer::retrieveByPk(1);
テンプレートファイル
<?php print $member->getNickname();?>

・URLとモジュール/アクションの関係は理解していないと先に進んだとき
何処を修正したら良いか分からなくなります。
・フロントコントローラ
アクセスがあったとき、どのモジュールに処理を渡すかコントロールする部分

2時間目
・引き続き課題
・答え合わせ

3時間目
・答え合わせ、続き

4時間目
・答え合わせ、続き、DB接続から
symfonyの関数名、大文字で書かないとエラーになるところとエラーにならないところがある。
これは、覚える以外にない。

・エラーがでたとき、以下にアクセスして確認
/front_dev.php

・画面の画像が化けるとき
symfony設定ファイルのシンボリックリンクを作成
/usr/share/pear/data/symfony/web/sfフォルダが/home/teacher/bbs2/web/sfで参照できるようシンボリックリンクを貼る
$ cd /home/teacher/bbs2/web/
$ ln -s /usr/share/pear/data/symfony/web/sf ./sf


・backend(mypage)にも設定
backend_dev.phpのパスも修正
$ ln -s ../sf ./sf

・本番環境で、リリースする場合は、_devは削除しておく。
残してあるとセキュリティホールになります。

5時間目
Peerでアクセス
Criteria(クライテリア)による条件指定
SQLでDBに問い合わせをするとき条件は、where句を使用していました。
Criteria基準
$c = new Criteria();
$c->add(テーブル名Peer::カラム大文字, 指定する値)

$c = new Criteria();
$c->add(MemberPeer::ID, 1)
条件を複数指定可能
全てのデータを取得したい場合、条件を空にする。
$member = MemberPeer::doSelect($c);
doSelectは配列でデータを受け取る。
・テンプレート側
<?php foreach ($members as $member):?>
<?php print $member->getNickname();?><br />
<?php endforeach;?>

foreach でmembersとmemberの書き方も習慣として書く
・ニックネームとメールアドレスを表示し、テーブルタグにする
テーブルタグは書けるようになっておいて下さい。
・memberができたら、commentテーブルも表示して下さい。

6時間目
・条件設定
カラム名は大文字で記述する。

複数条件の指定
$c = new Criteria();
$c1 = $c->getNewCriterion(MemberPeer::CREATED_AT, "2011/01/10" ,Criteria::GREATER_THAN);
$c2 = $c->getNewCriterion(MemberPeer::NICKNAME, "%wata2%" ,Criteria::LIKE);
$c1->addOr($c2);
$c->add($c1);
$this->member = MemberPeer::doSelect($c);
・複数条件しては、orのときしか使わない、andのときはほとんど使わない。

0 件のコメント:

コメントを投稿