2011年3月25日金曜日

3/25覚書

1時間目は遅刻

やること
昨日の復習
1.bbs2をbk.bbs2にリネームしてバックアップ
mv bbs2 bk.bbs2
2.front backend mypage
各アプリケーション作成およびdefaultモジュール作成。
3.backendとmypageで/区切りのURLでアクセス
4.frontアプリケーションのレイアウトを変更。

2時間目

1時間目続き。
30分から復習

3時間目
mypageは出るがbackendが出ない。はて。
/bbs2/web/backend/backend.phpの
../../にiが入ってた_| ̄|○
直った。

ちなみにでらっちが/web/main.cssと/apps/front/templates/layout.phpの
中身メールでくれてるよ。昨日とおとといのおいらの記事にもあるけど。
でらっちのみてね~。

member_addはいいのかなあ・・・・・・。

4時間目
retrieveByPK(1);のKは基本

困ったときのデバッグとシンボリックリンク
http://www.shonanbbs.com/front_dev.php
画面が真っ白のときはここを見ればエラーが書いてある。

で、デバッグバーの画像がまだ引っ張れてないので関連付け
bbs2/webで下記実行
ln -s /usr/share/pear/data/symfony/web/sf ./sf

sf -> /usr/share/pear/data/symfony/web/sf
が出ていればデバッグページでF5で出てくるよ。

backendやmypageなどのほかのページには、各ディレクトリへ移動してから
各_dev.phpの../を2個にしておくよ。

ln -s ../sf sf
上の階層(web)からsfを引っ張ってくるよ。

CSSも同じスタイルでよければ
ln -s ../CSS CSS
でつくよ。

セキュリティ上非常に危険なため、リリース前には必ず_dev.phpは削除する。

5時間目
Criteria(クライテリア)による条件指定
WHEREの代わりに使う。

$c = new Criteria();

$c->add(テーブル名Peer::カラム大文字, 指定する値, 条件)
条件を書かない場合はカラム=値と等しい場合となる。
SQL文だとこうなるけど
select * from member whwre id =1;
Symfonyではこうなる

//最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //IDが1のデータ
  //$c->add(MemberPeer::ID, 1);

  //member+sで複数にする。1行分のデータを引き出す。
  $members =MemberPeer::doSelectOne($c);

  //指定したIDのみ1行だけ引き出す。
  $member = MemberPeer::retrieveByPK(2);
  //$memberを表示させる。
  //print $member->getNickname();

  print_r ($members);

ソース出すとこうなる。データは配列で受け取る。
Member Object
(
    [id:protected] => 1
    [nickname:protected] => yamazaki
    [mailaddress:protected] => ****@gmail.com
    [password:protected] => 
    [created_at:protected] => 
    [alreadyInSave:protected] => 
    [alreadyInValidation:protected] => 
    [validationFailures:protected] => Array
        (
        )

    [_new:private] => 
    [_deleted:private] => 
    [modifiedColumns:protected] => Array
        (
        )

)

☆DBから名前のデータを引き出す。

action.class.php
  //最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);

indexSuccess.php
{を使うとわかりにくいので、:<?php endforeach;?>で囲う。

<?php foreach ($members as $member):?>
<?php echo $member->getNickname();?><br>
<?php endforeach;?>

☆練習問題
名前とメールアドレスをテーブルに出力+CSSで整形

indexSuccessのソース

<div class="tblData">
<table>
 <tr>
  <th>名前</th>
  <th>メールアドレス</th>
 </tr>
 <?php foreach ($members as $member):?>
 <tr>
  <td><?php echo $member->getNickname();?></td>
  <td><?php echo $member->getMailaddress();?></td>
 </tr>
 <?php endforeach;?>
</table>
</div>

MAINCSS
.tblData table {
border-collapse:collapse;
font-size:93%;
margin:5px 0;
}
.tblData th {
background:none repeat scroll 0 0 #EEEEEE;
color:#333333;
font-weight:bold;
padding:5px;
width:120px;
}
.tblData th, .tblData td {
border:1px solid #ddd;
paddig: 5px 10px;
}


6時間目
☆Criteria(クライテリア)による条件指定

条件
Criteria::EQUAL
Criteria::NOT_EQUAL

//最初に必ずセット select * from member;と同じ。
  $c = new Criteria();

  //IDが1のデータ
  //$c->add(MemberPeer::ID, 1);

  //IDがyamazakiのデータ select * from member where nickname ;
  //$c->add(MemberPeer::NICKNAME, 'yamazaki', Criteria::NOT_EQUAL);

  //like指定
  //$c->add(MemberPeer::NICKNAME, "%yama%", Criteria::LIKE);

  //日付指定検索
  //$c->add(MemberPeer::CREATED_AT, "2011-03-01", Criteria::GREATER_THAN);

  //複数条件
  //$c1 = $c->getNewCriterion(MemberPeer::CREATED_AT, "2011-03-01", Criteria::GREATER_THAN);
  //$c2 = $c->getNewCriterion(MemberPeer::NICKNAME, "ya%", Criteria::LIKE);
  //$c1->addOr($c2);
  //$c->add($c2);

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);

忘れてたUPDATE
日付修正ID指定込み
update member set created_at ='2011-03-25' where id =2;
名前文字化け修正ID指定込み
update member set nickname =('名前') WHERE id =2;


☆練習問題 テーブルの上に検索欄追加。余裕のある人はcommentも呼び出して。
indexSuccess側
<form action="/" method="POST">
名前:<input type="text" name="keyword">
<input type="submit" name="send" value="送信"></form>

action側
  //最初に必ずセット select * from member;と同じ。
  $c = new Criteria();
  //シンプルなlike検索機能
  $keyword = $this->getRequestParameter("keyword");
  if($keyword !=""){
  $c->add(MemberPeer::NICKNAME, "%".$keyword."%", Criteria::LIKE);
  }

  //$member+sで複数にする。テーブルのすべてのデータを引き出す。
  $this->members = MemberPeer::doSelect($c);


commentに何も入れてなかった。サンプルに残そー。

insert into comment (nickname,content,created_at) values ('山崎','腰が痛い','2011-03-25');
insert into comment (nickname,content,created_at) values ('みっくみく','ボカロボカロ','2011-03-25');
insert into comment (nickname,content,created_at) values ('サンレッド','コードナンバー046','2011-03-25');
insert into comment (nickname,content,created_at) values ('ウサコッツ','アニマル怪人','2011-03-25');