ラベル 掲示板2 の投稿を表示しています。 すべての投稿を表示
ラベル 掲示板2 の投稿を表示しています。 すべての投稿を表示

2011/03/28

symfonyで掲示板作成、criteria

php講習 3/28

天気が良いので外は気持ちいい。
しかし、花粉が心配。

1時間目
・先週の復習
  criteria
・symfony、「モデルによるCRUD」から
  Webアプリでは、DB操作で下記4つの機能で実現できます。
  Create
  Read
  Update
  Delete

・モデルでの書き方
memberの場合、IDとcreated_atは記述しない。モデルで自動的にセットする。
・action.class.phpで記述をして、アクセスし、データがinsertされることを確認する。
・commentテーブルでも同様の記述を行い、データがinsertされることを確認する。

2時間目
・insert,delete
・オブジェクトを使ってDBを操作、ORマッピング
Web開発の現場では、SQLは使わずORマッピングで開発しています。

・以上の使い方に慣れる
member_addモジュールを作成。
$ symfony init-module front member_add
insert,confirm,resultアクション作成。
inputSuccess.php
confirmSuccess.php
resultSuccess.php


3時間目
・午前の答え合わせ
class member_addActions extends sfActions
{
 public function executeInput()
 {
  return sfView::SUCCESS;
 }
 public function executeConfirm()
 {
  //  パラメータで受け取る
  $this->nickname  = $this->getRequestParameter('nickname') ;
  $this->mailaddress  = $this->getRequestParameter('mailaddress') ;
  return sfView::SUCCESS;
 }
 public function executeResult()
 {
  //  パラメータで受け取る
  $nickname  = $this->getRequestParameter('nickname') ;
  $mailaddress  = $this->getRequestParameter('mailaddress') ;
  // symfonyでモデルの書き方(CRUD:insert)
  // まず、空の行を作る
  $member = new Member();
  // データをセットする
  $member->setNickname($nickname) ;
  $member->setMailaddress($mailaddress);
  // 保存する
  $member->save();
  return sfView::SUCCESS;
 }
}
・今やっているところは、アプリケーション名、モジュール名(アクション名)の関係が
わかるようになって下さい。
・会員一覧ページを作る(app:member_list/index)
一覧表はfrontモジュールのincexアクションと同じことをやっているので参考にして下さい。
$ symfony init-module front member_list
・編集ボタンで編集できるようにする。(app:member_edit)
$ symfony init-module front member_edit
indexSuccess.php
・編集用アクションinput,confirm,resultを作成する。
inputSuccess.php
confirmSuccess.php
resultSuccess.php

4時間目
・答え合わせ

5時間目
・答え合わせ、member_list/indexSuccess.php

6時間目
・答え合わせ、member_edit/inputSuccess.php,confirmSuccess.php,resultSuccess.php
public function executeInput()
 {
  $id = $this->getRequestParameter('id') ;
  $this->member = MemberPeer::retrieveByPK($id) ;
  return sfView::SUCCESS;
 }

 public function executeConfirm()
 {
  $this->id          = $this->getRequestParameter('id') ;
  $this->nickname    = $this->getRequestParameter('nickname') ;
  $this->mailaddress = $this->getRequestParameter('mailaddress') ;
  return sfView::SUCCESS;
 }

 public function executeResult()
 {
  //  パラメータで受け取る
  $id          = $this->getRequestParameter('id') ;
  $nickname    = $this->getRequestParameter('nickname') ;
  $mailaddress = $this->getRequestParameter('mailaddress') ;
  // 更新したい行(オブジェクト)をまず取得する
  $member = MemberPeer::retrieveByPK($id) ;
  $member->setNickname($nickname) ;
  $member->setMailaddress($mailaddress);
  // 保存する
  $member->save();
  return sfView::SUCCESS;
 }

・一覧画面に削除リンクを付け、削除処理を追加する。
モジュールはmember_list
public function executeDelete()
 {
  // DBアクセス
  $id = $this->getRequestParameter('id') ;
  $member = MemberPeer::retrieveByPK($id) ;
  // データを削除する(一度削除するともうないので判断を入れる)
  if ($member) {
   $member->delete();
  }
  return sfView::SUCCESS;
 }

・明日はdeleteを解説
・今日やったところであやふやな部分がある人はモジュールをlinux上でリネームして
復習をして下さい。
(eclipseでリネームすると文字化けすることがあるのでlinux上でリネームする)

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のときはほとんど使わない。

2011/03/24

symfonyで掲示板作成

php講習 3/24

今日も外の掃除は寒かった。

1時間目
・昨日の復習
プロジェクトの確認
アプリケーションの確認
プロジェクト直下でモジュール作成
フォルダ構成の確認

・eclipse,phpソースの整形方法(便利)
Ctr + Shift + F

・昨日の課題の答え合わせ
アクション(action.class.php)
テンプレート(inputSuccess.php,confirmSuccess.php,resultSuccess.php)

2時間目
・続き、テンプレート(confirmSuccess.php)

・入力画面にメールアドレス(mailaddress)を追加し、完了画面まで渡す。(作業時間10分で)
アクション(action.class.php)
テンプレート(inputSuccess.php,confirmSuccess.php)

・今回の作業であやしい人は、新しい変数を追加して手順を確認する。

・昨日は、bbs2プロジェクトで、frontアプリケーションを作った
URLとモジュール、アクションの関係

正しくは、http://ドメイン名/アプリケーションのフロントコントローラ名/モジュール名/アクション名
一番最初に作成したフロントコントローラ名は省略可能

/bbs2/web/index.php
アプリケーションのフロントコントローラ
(全てのリクエストを受け取るところ)

・バックエンドアプリケーション(backend)作成
プロジェクト直下へ
symfony init-app backend
管理機能画面
アプリケーションごと(backend)のリクエストを受け取るフロントコントローラは、backend.php

・デフォルトモジュール作成
symfony init-module backend default
結果を確認

・バックエンドの機能確認

http://ドメイン名/アプリケーションのフロントコントローラ名/モジュール名/アクション名
backend.php/default/index
業界として、phpが付くのはかっこ良くない。
ここをbackendでアクセスできるようになる。設定と説明は午後。

3時間目
最初に作ったアプリケーションのモジュールにアクセスするときだけ、
フロントコントローラ名は省略出来ます。
2番目以降に作ったものは省略出来ません。
(backendは省略出来ません)

・backend.phpをbackendにする作業は、
今後アプリケーションを追加するときその都度作業するので忘れないように。
・アプリケーション名のディレクトリを作成
cd bbs2/web
mkdir backend
mv backend.php backend_dev.php ./backend
cp .htaccess ./backend

apacheの設定ファイルを変更
vi .htaccessで以下の2行を修正
  RewriteBase /
  RewriteRule ^(.*)$ /backend/backend.php [QSA,L]

パスを変更
backend.phpを修正
define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/../..'));
スタイルシートへのパスが切れているので、文字のサイズは変わった。

・アプリケーションを作成
・デフォルトモジュールを作成
・フロントモジュールでアクセス出来ることを確認
・設定を変更し、アプリケーション名でアクセス出来ることを確認する。

・アプリケーションを作成
symfony init-app backend
symfony init-app mypage

・デフォルトモジュールを作成
symfony init-module backend default
symfony init-module mypage default

・フロントモジュールでアクセス出来ることを確認
まず、アクションで出力
      print "backend" ;
      return sfView::SUCCESS;
次に、URLでアクセス

・設定を変更し、アプリケーション名でアクセス出来ることを確認する。
ディレクトリを作成し移動と、コピー
アクセスのための設定変更対象
.htaccess
backend.php

・出来た人は、別のアプリケーション(mypage)を作成して同じ作業を行う。
アクセス出来ないときは、ブラウザを一度閉じてから開くとアクセス出来ることがある。

4時間目
・作業をmypageで実施。
・作業手順があやふやな人は、アプリケーション、モジュールを作って作業をやってみる。

・会員登録のリンク
<a href="/member_add/input">会員登録</a>

・layout.phpの説明
<head>タグの内容は記述されていないが、以下のファイルで修正可能
設定ファイルを修正したら、コマンドを実行
symfony cc
  →変更が反映されなかった
>> file-  Permission denied in /usr/share/pear/symfony/vendor/pake/pakeFunction.php on line 197
# chomod 777 -R front
symfony ccをrootで実行すると権限がおかしくなることがあるらしい。

5時間目
keywords 検索エンジンで引くキーワード、カンマ区切り
個別に行うときは、部品化、もしくは、viewから削除

スタイルシートの指定も可能
デフォルトはmain /web/css/main.css
複数指定は、カンマ区切り
javascriptはいまは何もしない。
haslayout レイアウトを使わない設定も可能。
複数のレイアウトを使う設定も可能。