2011年3月24日木曜日

3/24覚書

1時間目
腰痛&腹痛のため掃除はお休み。
・EclipceでShift+Ctrl+Fキーで勝手に整形してくれる。超便利。
(でも今までの感覚からするとちょっと見づらいかな;)
・☆練習問題解説編
user_addモジュールにinput、confirm、resultのactionを入れよう。
ページの内容は名前を入力→確認→完了の流れで作ろう。
できたらMENUの下に会員登録ってリンクつけてね。

ファイル自体が壊れたりエラーが多い時はPuTTYで削除かディレクトリごと

2時間目

・☆練習問題解説編続き
・メールアドレスの処理を追加
・bbs2にbackendアプリ追加
symfony init-app backend

frontは記事表示を担当。backendで管理機能を担当。
frontコントローラーのリクエストを受けるのはindex.php。
frontアプリケーションのfrontコントローラーはindex.php。

backendコントローラーのリクエストを受けるのはbackend.php。
backendアプリケーションのbackendコントローラーはbackend.php。

backendにdefaultmodule追加
bbs2で以下実行
symfony init-module backend default

2番目以降のURLは省略不可。
ブラウザでアクセスするときは
http://www.shonanbbs.com/backend.php/default/index
SEO的にまずいので/で簡略化だけど3時間目で。

3時間目

アプリ―コントローラーの関係

見栄えの問題やSEO上の考慮から
http://www.shonanbbs.com/backend/default
でアクセスできるように設定する。

1.cd /home/teacher/bbs2/web
に移動

2.backendディレクトリを作成
mkdir backend

3.backend.php backend_dev.phpをbackendディレクトリへ移動
mv backend.php backend_dev.php ./backend

4.htaccessディレクトリをbackendディレクトリへコピー
cp .htaccess ./backend

5.backendディレクトリへ移動
cd backend

6..htaccessの内容を変更する
vi .htaccess
RewriteBaseとRewriteRuleを以下のように変更

8行目
#RewriteBase /の#をとる
22行目
RewriteRule ^(.*)$ /backend/backend.php [QSA,L]
に変更する。

7.backend.phpを開いて下記に変更
3行目
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../..'));
/..を1階層増やすだけ。

8.http://www.shonanbbs.com/backend/defaultでアクセスできることを確認。

☆練習問題
mypageアプリを新規追加してbackendと同じようになってみよう。

4時間目

☆練習問題
mypageアプリを新規追加してbackendと同じようになってみよう。

の答え合わせ。

☆YAML
ヘッダー情報はYAML、ymlファイルで管理。
/bbs2/apps/front/config/view.yml

metas:
title: SHONANBBS
に変更し、
symfony cc(CCはキャッシュクリア)
ymlを変更したら必ずsymfony ccを行い、F5でページ更新。

ここの詳しい話は後日。
5時間目
metasの内容を以下に変更。

description: 課題掲示板です。
keywords: WEBエンジニア養成科,php,Symfony
language: ja

変更したらsymfony ccを行い、F5でページ更新。

■出ないとき
キャッシュをクリアする権限をユーザーでなくrootですると、Symfony ccが正常終了しない。
bbs2で
chown -R ユーザー:ユーザー /cache
でキャッシュの権限をユーザーに変更しなおすか、

chown -R755 ユーザー:ユーザー /cache
+パーミッション変更やてみる。


個別に書きたいときは各metasの項目を削除しlayout.phpで直書きか後日行う部品化を使う。

CSSも stylesheets: [main]
標準のCSS正規パス /home/yamazaki/bbs2/web/css/main.cssに存在する。
書き足したいときはカンマ+スペースで区切る
stylesheets: [main, mypage, ・・・]

javascripts: []もある。今はいじらないけど。

has_layout: on

actionの出力結果をレイアウトしなくていいときはoffにできるよ。

layout: layout
layout.phpを使うという意味。名称変更可能。

☆データベース
SQL を使用せずにデータベースを操作する、O/Rマッピングを使う。

O/R マッピングとは、「オブジェクト」と「リレーショナルデータベース」を
マッピング(対応付け)することです。
O/R マッピングは実装時のデータベース操作にかかわる煩雑な作業を軽減してくれます。

SQLのデータの記述はルールが無いため複雑になりやすい。

O/Rマッピングはルールが決まっているので作業効率が上がる。

とりあえずrootでmysqlログインするよー

ログインしたらcreate database study;でDB作成。
show database;でstudyの存在を確認したら

GRANT ALL ON study.* TO ユーザー名@"localhost" IDENTIFIED BY "パスワード";
flush privileges;

ホスト名は同じサーバーならlocalhost、外部からならIPアドレス。

しかし・・・・・・なぜかflush privileges;ができない
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
になってしまう。

回避策
use mysql;

を実行し下記コピペ。

CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

も一回flush privileges;でようやく完了。

6時間目
comment、member、テーブル作成。

create table comment (
id int not null auto_increment,
nickname text,
content text,
created_at datetime,
primary key(id)
);

create table member (
id int not null auto_increment,
nickname text,
mailaddress text,
password text,
created_at datetime,
primary key(id)
);

☆Symfonyでのデータベース接続
/bbs2/config/databases.yml
#をすべて取る。

mysql://root@localhost/dbnameを変更
mysql://ユーザー名:パスワード@localhost/study
エンコード設定とプログラムの記述注意点
YAMLは先頭部分の記述は半角スペース2個をひとつと判断している。
この部分の構成は崩さないように。

all:
  propel:
    class:          sfPropelDatabase
    param:
      dsn:          mysql://ユーザー名:パスワード@localhost/study
      encoding: utf8


/bbs2/config/propel.iniの以下を変更

propel.database.createUrl = mysql://root@localhost/
propel.database.url = mysql://root@localhost/bbs2


propel.database.createUrl = mysql://ユーザー名:パスワード@localhost
propel.database.url = mysql://ユーザー名:パスワード@localhost/study

☆schema.ymlを作成する(DB作成後のみ処理可能)
モデルを作成するための設計書にあたるschema.ymlを作成する。
DBを見に行って接続情報・テーブル情報を引き出し、データファイルを作るための設計書を作成。

一般ユーザーでbbs2から実行。
symfony propel-build-schema

vi /bbs2/config/schema.yml
で中身にcommentテーブルなどが出ている。

次にモデルファイルを作成。
bbs2で実行
symfony propel-build-model

cd lib/modelの中身にcommentPeer.phpとmemberPeer.phpができていればおk。

?? テーブル構造に変化があったらschemaとmodel再生成。
独自追加したい場合はschema.ymlとDB両方とも手書き修正。
自動生成させるとせっかく変えた設定が上書きされてしまう。

7時間目

データ入れます。
set names sjis;
忘れないでねー。

INSERT INTO member (nickname, mailaddress) VALUES
('yamazaki', 's****@gmail.com');
INSERT INTO member (nickname, mailaddress) VALUES
("みっくみく", "mmd@gmail.com");
INSERT INTO member (nickname, mailaddress) VALUES
("サンレッド", "sunred@gmail.com");
INSERT INTO member (nickname, mailaddress) VALUES
("ウサコッツ", "usako@gmail.com");

停電なんでここまで。