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');