<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5799067538558710430</id><updated>2024-09-16T13:36:28.862+09:00</updated><category term="講座"/><category term="Symfony"/><category term="住所録"/><category term="掲示板"/><category term="PHP"/><category term="Smarty"/><category term="SQL"/><category term="講座、session"/><category term="sfPageFlow"/><category term="クラス"/><category term="掲示板2"/><category term="講座、Symfony、VirtualHost"/><category term="CRUD"/><category term="Linux"/><category term="VMWARE"/><category term="cookie"/><category term="mypage"/><category term="session"/><category term="validate"/><category term="アクセス制御"/><category term="オブジェクト指向"/><category term="カウント"/><category term="カワハギ"/><category term="コンポーネント"/><category term="セキュリティ"/><category term="セッション"/><category term="ヘルパー"/><category term="ルーティング"/><category term="ログイン"/><category term="旅行"/><category term="日々徒然"/><category term="課題"/><category term="講座、vi、UNIX"/><category term="講座、vi、UNIX、Linuxサーバー準備"/><category term="部品化"/><title type='text'>上州屋江ノ島支部</title><subtitle type='html'>釣りと学校の日々徒然</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-742001665666846798</id><published>2011-04-28T17:22:00.000+09:00</published><updated>2011-04-28T17:22:48.565+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sfPageFlow"/><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/28覚書</title><content type='html'>&lt;pre class=&quot;prettyprint&quot;&gt;しのさん協力■sfPageFlowを使っての新規作成■

■PROJECT作成「プロジェクト名」

一般ユーザでログインし以下を入力
mkdir プロジェクト名
cd プロジェクト名
symfony init-project プロジェクト名

■Application作成
「front」
「backend」
symfony init-app front
symfony init-app backend

■apacheの設定を変更
suでrootへ変更。

/etc/httpd/conf/httpd.confに以下を記述

vi /etc/httpd/conf/httpd.conf

&amp;lt;VirtualHost *:80&amp;gt;
        ServerName www.プロジェクト名（任意）.jp
        DocumentRoot /home/ユーザー名/プロジェクト名/web

        &amp;lt;Directory &quot;/home/ユーザー名/プロジェクト名/web&quot;&amp;gt;

               AllowOverride All
               Options -Includes -ExecCGI
        &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;

■5.Apache再起動
/etc/init.d/httpd restart
実行

httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

----------------------------------------
■C:\Windows\System32\drivers\etc\hostsに 

127.0.0.1(サーバのIP) www.shonanbbs.com
192.168.0.128 www.プロジェクト名.jp

192.168.0.128 www.プロジェクト名.jp　表示を確認。
----------------------------------------
■symfony設定ファイルのシンボリックリンク作成

cd /home/ユーザー名/プロジェクト名/web/

ln -s /usr/share/pear/data/symfony/web/sf ./sf



◆DB/カラム作成
mysql -u rootで入って作成
CREATE DATABASE enojo;

■MySQLユーザーを作成して権限付与
GRANT ALL ON DB名.* TO ユーザー名@&quot;localhost&quot; IDENTIFIED BY &quot;password&quot;;
flush privileges;

◆テーブル作成
■テーブル作成
●member
CREATE TABLE member(id int not null auto_increment primary key);
ALTER TABLE member ADD comment_id int not null;
ALTER TABLE member ADD sei varchar(255);
ALTER TABLE member ADD mei varchar(255);
ALTER TABLE member ADD sei_kana varchar(255);
ALTER TABLE member ADD mei_kana varchar(255);
ALTER TABLE member ADD nickname varchar(255);
ALTER TABLE member ADD pass text;
ALTER TABLE member ADD photo1 text;
ALTER TABLE member ADD gender tinyint(1);
ALTER TABLE member ADD zip_code int(7);
ALTER TABLE member ADD pref tinyint(2);
ALTER TABLE member ADD address1 varchar(255);
ALTER TABLE member ADD address2 varchar(255);
ALTER TABLE member ADD address3 varchar(255);
ALTER TABLE member ADD tel varchar(11);
ALTER TABLE member ADD email varchar(255);
ALTER TABLE member ADD note text;
ALTER TABLE member ADD update_at datetime;
ALTER TABLE member ADD create_at datetime;
ALTER TABLE member ADD del_flg tinyint(1);

●reply
create table reply(id int not null auto_increment primary key);
ALTER TABLE reply ADD comment_id int not null;
ALTER TABLE reply ADD name varchar(255);
ALTER TABLE reply ADD content varchar(255);
ALTER TABLE reply ADD photo1 text;
ALTER TABLE reply ADD photo2 text;
ALTER TABLE reply ADD email varchar(255);
ALTER TABLE reply ADD reply_cnt int;
ALTER TABLE reply ADD create_at datetime;
ALTER TABLE reply ADD del_flg tinyint(1);


●comment
create table comment(id int not null auto_increment primary key);
ALTER TABLE comment ADD comment_id int not null;
ALTER TABLE comment ADD content text;
ALTER TABLE comment ADD categorie int;
ALTER TABLE comment ADD photo1 text;
ALTER TABLE comment ADD photo2 text;
ALTER TABLE comment ADD photo3 text;
ALTER TABLE comment ADD note text;
ALTER TABLE comment ADD access_cnt int;
ALTER TABLE comment ADD create_at datetime;
ALTER TABLE comment ADD update_at datetime;
ALTER TABLE comment ADD del_flg tinyint(1);




■テーブル構造の確認
show databases;
describe member;
describe reply;
describe study;
■テーブルの確認
show tables;

■カラムを削除。
ALTER TABLE member drop comment_id;
ALTER TABLE member drop memo;



◆プロジェクト作成

symfony propel-build-schema
symfony propel-build-model

■web/backendディレクトリ作成
cd /home/ユーザー名/プロジェクト名/web

mkdir backend

mv backend.php backend_dev.php ./backend

cp .htaccess ./backend

■.htaccessの内容を変更

cd backend

vi .htaccess

■RewriteBaseとRewriteRuleを以下のように変更

Options +FollowSymLinks +ExecCGI

&amp;lt;IfModule mod_rewrite.c&amp;gt;
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  RewriteBase /

  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ /backend/backend.php [QSA,L]
&amp;lt;/IfModule&amp;gt;

# big crash from our front web controller
ErrorDocument 500 &quot;&amp;lt;h2&amp;gt;Application error&amp;lt;/h2&amp;gt;symfony application failed to start properly&quot;

■web/backend/backend.phpを以下のように修正

define(&#39;SF_ROOT_DIR&#39;, realpath(dirname(__FILE__).&#39;/..&#39;));
↓
define(&#39;SF_ROOT_DIR&#39;, realpath(dirname(__FILE__).&#39;/../..&#39;));

■/home/sheena/hunt/apps/front/config/view.ymlを開き、
title、description、keywords を変更する

終了後symfony cc

■データベースへの接続情報を設定する

プロジェクト名/config/databases.yml を開く

all:
  propel:
    class: sfPropelDatabase
    param:
      dsn: mysql://ユーザー名:password@localhost/プロジェクト名
      encoding: utf8
      
■プロジェクト名/config/propel.iniを開き、以下の2項目を修正する

propel.database.createUrl = mysql://ユーザー名:password@localhost
propel.database.url = mysql://ユーザー名:password@localhost/プロジェクト名

◆sfPageFlow（Model名はlib/model参照。最初が大文字なら合わせる。）
管理者用会員情報
symfony propel-generate-create backend default Member
symfony propel-generate-edit backend default Member
symfony propel-generate-list backend default Member

管理者用コメント管理
symfony propel-generate-list backend comment_edit Comment

ログイン
symfony propel-generate-create front login Member
ログアウト
symfony propel-generate-create front logout Member

一般用新規登録
symfony propel-generate-create front member_add Member

新規投稿
symfony propel-generate-create front default Comment
symfony propel-generate-list front default Comment

返信
symfony propel-generate-create front reply_add Reply 

投稿管理
symfony propel-generate-edit front comment_edit Comment

必要なもの

/lib/helper/
MyUtilityHelper.zip解凍後のMyUtilityHelper.phpでおｋ

/apps/front/templates
_pager.php

/apps/front/lib
myUser.class.php

actionにある下記をCommentPeer.phpへ移動
    static public function getPager($perpage, $page, $parameters)
    {
        $c = new Criteria();
        //$c-&amp;gt;addDescendingOrderByColumn(self::CREATED_AT);
        $pager = new sfPropelPager(&#39;Comment&#39;, $perpage);
        $pager-&amp;gt;setCriteria($c);
        $pager-&amp;gt;setPage($page);
        $pager-&amp;gt;init();
        return $pager;
    }
    
このままだと編集できないので
&amp;lt;a href=&quot;/comment_edit/flow?id=&amp;lt;?php echo $item-&amp;gt;getId();?&amp;gt;&quot;&amp;gt;edit&amp;lt;/a&amp;gt;
を追加
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/742001665666846798/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/428.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/742001665666846798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/742001665666846798'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/428.html' title='4/28覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-8121241911522823771</id><published>2011-04-28T10:30:00.001+09:00</published><updated>2011-04-28T10:30:56.070+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sfPageFlow"/><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/25覚書</title><content type='html'>腰痛きついいいい。ちくしょー。&lt;br /&gt;
4時間目から登校。&lt;br /&gt;
☆sfPageFlow&lt;br /&gt;
めんどくさい投稿、編集、完了を一気にやってくれるプラグイン。&lt;br /&gt;
&lt;br /&gt;
最初の解凍方法で詰まったっす・・・・&lt;br /&gt;
&lt;br /&gt;
ええとまずgenerator.zipを自分のプロジェクト直下にFTPでUP。&lt;br /&gt;
mv generator.zip /usr/share/pear/data/symfony/&lt;br /&gt;
そのあとsuでrootログインして移動&lt;br /&gt;
cd /usr/share/pear/data/symfony/&lt;br /&gt;
解凍失敗してたファイルを移動&lt;br /&gt;
mv generator bk.generator&lt;br /&gt;
再度解凍&lt;br /&gt;
unzip generator.zip&lt;br /&gt;
&lt;br /&gt;
あとは教科書通りで。&lt;br /&gt;
rootに入ったときはcd /home/で入るよ。ってすっかり忘れてたよ･･･。&lt;br /&gt;
&lt;br /&gt;
課題がBBS焼き直しなのでそのまま入った。&lt;br /&gt;
symfony propel-generate-create backend member_add Member&lt;br /&gt;
symfony propel-generate-edit backend member_edit Member&lt;br /&gt;
symfony propel-generate-list backend member_list Member&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;書きかけ
if(!$member){
$this-&amp;gt;redirect(&#39;testmember_list/index&#39;)
}
&amp;lt;a href=&quot;/testmember_list/index?delete=on&amp;id=&amp;lt;?php echo $item-&amp;gt;getId()?&amp;gt;&quot;&amp;gt;
&amp;lt;a onclick=&quot;return confirm(&#39;削除しますか?&#39;);&quot; href=
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/8121241911522823771/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/425_28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/8121241911522823771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/8121241911522823771'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/425_28.html' title='4/25覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-7355622156779329800</id><published>2011-04-25T16:55:00.000+09:00</published><updated>2011-04-25T16:55:31.625+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="validate"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/25覚書</title><content type='html'>色々あってかなり間が空いた。その色々は主に金銭面だが。&lt;br /&gt;
&lt;br /&gt;
1時間目&lt;br /&gt;
☆エラーチェック&lt;br /&gt;
frontにmember_addモジュール作成。&lt;br /&gt;
以下記述&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php use_helper(&#39;Validation&#39;);?&amp;gt;　←Validationヘルパー呼び出し
&amp;lt;form action=&quot;/backend/member_add/confirm&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot;name=&quot;name&quot;
value=&quot;&amp;lt;?php echo $sf_params-&amp;gt;get(&#39;name&#39;)?&amp;gt;&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php echo form_error(&#39;name&#39;);?&amp;gt;
メールアドレス:&amp;lt;input type=&quot;text&quot;name=&quot;mail&quot; size=&quot;30&quot;
value=&quot;&amp;lt;?php echo $sf_params-&amp;gt;get(&#39;mail&#39;)?&amp;gt;&quot;&amp;gt;
&amp;lt;?php echo form_error(&#39;mail&#39;);?&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;確認&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
1.値を渡す先のaction名.ymlをvalidateディレクトリに置く。&lt;br /&gt;
confrim.yml作成&lt;br /&gt;
2.validate/action名.ymlにエラーチェックのルールを記述する。&lt;br /&gt;
confirm.ymlに以下記述&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;fields:
  name:
    required:
      msg: ニックネームを入力してください。
  mail:
    required:
      msg: メールアドレスを入力してください。
    sfEmailValidator:
      email_error:  メールアドレスを正しく入力してください。
&lt;/pre&gt;3.エラーだった場合の遷移先をactionで定義する。&lt;br /&gt;
　handleErroraction名で作成する。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  public function handleErrorConfirm()
  {
 $this-&amp;gt;forward(&#39;member_add&#39; , &#39;input&#39;);
  }
&lt;/pre&gt;&lt;br /&gt;
2時間目&lt;br /&gt;
&lt;br /&gt;
4.エラーメッセージを表示させる。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;fields:
  name:
    required:
      msg: ニックネームを入力してください。
  mail:
    required:
      msg: メールアドレスを入力してください。
&lt;/pre&gt;&lt;br /&gt;
出たけどこの謎矢印はSymfonyが出してるのか･･･。&lt;br /&gt;
configのsettings.ymlを以下修正。ALLの#もあったら取ろう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#    validation_error_prefix:    &#39; &amp;darr;&amp;nbsp;&#39;
#    validation_error_suffix:    &#39; &amp;nbsp;&amp;darr;&#39;
&lt;/pre&gt;の#と&amp;darr;&amp;nbsp;、&amp;nbsp;&amp;darr;を消す。&lt;br /&gt;
&lt;br /&gt;
片方だけ入力すると、入力した値は消えずに残っている。SymfonySUGEEEEE。&lt;br /&gt;
仕組みはhandelErrorConfirmでforwordが値を内部的に保持してくれている。&lt;br /&gt;
それを$sf_paramsが受け取っているから表示できる。&lt;br /&gt;
&lt;br /&gt;
☆応用　if文でエラーチェック。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php if($sf_request-&amp;gt;haserror(&#39;name&#39;)):?&amp;gt;
&amp;lt;div style=&quot;background-color:#ff0000;&quot;&amp;gt;
&amp;lt;?php echo form_error(&#39;name&#39;);?&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;?php endif;?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
strictは正規表現のvalidate。ただ、strictをつけると携帯のメールがはじかれる？&lt;br /&gt;
&lt;br /&gt;
数字のvalidater&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;    sfNumberValidator:
      num_error:    整数を入力してください
      min:            0
      min_error:     値は最小0でなければなりません。
      max:           100
      max_error:    値は100以下でなければなりません。
&lt;/pre&gt;&lt;br /&gt;
3時間目&lt;br /&gt;
&lt;br /&gt;
☆比較Validater&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
☆自作Validator&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;member_addのconfirm.ymlのnameのすぐ後に以下追加
    myNameValidator:
      name_error:    そのニックネームはすでに使われています。

&lt;/pre&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;module直下のlibディレクトリに作成。
myname（ymlと同じ）validator.class.php
その中身

&amp;lt;?php

class myNameValidator extends sfValidator
{
 public function execute(&amp;$value, &amp;$error)
 {
  //actionではないので呼び出し処理が必要
  $request = sfContext::getInstance()-&amp;gt;getRequest();
  $user = $this-&amp;gt;getContext()-&amp;gt;getUser;

  $c = new Criteria();
  $c -&amp;gt;add (MemberPeer::NICKNAME,
  $request-&amp;gt;getParameter(&#39;name&#39;));
  $count = MemberPeer::doCount($c);

  if ($count !=0){
   $error =&#39;このニックネームはすでに使用されています。&#39;;
   return false;
  }
  return true;
 }

}

?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
おまけ&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;出力したエラーメッセージのクラスは以下

&amp;lt;div style=&quot;&quot; class=&quot;form_error&quot; id=&quot;error_for_mail&quot;&amp;gt; メールアドレスを入力してください。 &amp;lt;/div&amp;gt;
default→configのsettings.ymlのValidate箇所で変更可能。
main.cssでCSS設定もおｋ。
&lt;/pre&gt;&lt;br /&gt;
以降は自習。validate処理追加していこう。とな。&lt;br /&gt;
なんとか自前のmember_addに入れられた・・・はふー。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/7355622156779329800/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/425.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7355622156779329800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7355622156779329800'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/425.html' title='4/25覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-8508319314147809537</id><published>2011-04-15T16:54:00.000+09:00</published><updated>2011-04-15T16:54:03.829+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="課題"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/15覚書</title><content type='html'>腰痛＋バイト面接で課題－3日。&lt;br /&gt;
さてがんばるか～。&lt;br /&gt;
☆制作課題&lt;br /&gt;
1.システム概要&lt;br /&gt;
・どんなシステムを作るか&lt;br /&gt;
・ターゲットユーザー&lt;br /&gt;
・収益モデル&lt;br /&gt;
等々&lt;br /&gt;
2.DBテーブル構成&lt;br /&gt;
3.アプリケーション・モジュール作成&lt;br /&gt;
4.各モジュールページ遷移図&lt;br /&gt;
&lt;br /&gt;
全く考えてなかった。&lt;br /&gt;
&lt;br /&gt;
2時間目も考えるが見事なまでに何もでない。&lt;br /&gt;
&lt;br /&gt;
1.システム概要&lt;br /&gt;
・どんなシステムを作るか&lt;br /&gt;
　→アフィリエイト＋釣果掲示板&lt;br /&gt;
・ターゲットユーザー&lt;br /&gt;
　→釣り人（海）LT系&lt;br /&gt;
・収益モデル&lt;br /&gt;
　→楽天のアフィリ収益&lt;br /&gt;
等々&lt;br /&gt;
2.DBテーブル構成&lt;br /&gt;
まあBBSとほぼ一緒。&lt;br /&gt;
3.アプリケーション・モジュール作成&lt;br /&gt;
4.各モジュールページ遷移図&lt;br /&gt;
&lt;br /&gt;
で、こんなのできた。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBZSNDbg5GT6J4aawRznkf_KmZTam4m2PnKVetNPnPtQJ9fjW7H72PvOqVRfoiPoj-3DIjrvGgdF7LTwascZlffR7MmMf4FXelHjGyeU_ApvcvwdUmsmpo7aAMdQRUvkeze52ggL9T-HcL/s1600/flow01.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBZSNDbg5GT6J4aawRznkf_KmZTam4m2PnKVetNPnPtQJ9fjW7H72PvOqVRfoiPoj-3DIjrvGgdF7LTwascZlffR7MmMf4FXelHjGyeU_ApvcvwdUmsmpo7aAMdQRUvkeze52ggL9T-HcL/s512/flow01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
自宅でやります･･････。&lt;br /&gt;
&lt;br /&gt;
テーブル名とカラム名は同じにしないって一言が･･････あれ？　似たようなことを前に聞いた気がする。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/8508319314147809537/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/415.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/8508319314147809537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/8508319314147809537'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/415.html' title='4/15覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBZSNDbg5GT6J4aawRznkf_KmZTam4m2PnKVetNPnPtQJ9fjW7H72PvOqVRfoiPoj-3DIjrvGgdF7LTwascZlffR7MmMf4FXelHjGyeU_ApvcvwdUmsmpo7aAMdQRUvkeze52ggL9T-HcL/s72-c/flow01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-6752436545448534602</id><published>2011-04-11T18:54:00.000+09:00</published><updated>2011-04-11T18:54:57.332+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mypage"/><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="ログイン"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/11覚書</title><content type='html'>1時間目自習&lt;br /&gt;
mypage未作成の人が居るためでらっち奔走。&lt;br /&gt;
&lt;br /&gt;
mypageとかのfront以外のアプリ追加手順は&lt;a href=&quot;http://sari1225.blogspot.com/2011_03_24_archive.html&quot;&gt;この日記を参照&lt;/a&gt;してほしい。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
mypageのlayout設定。&lt;br /&gt;
CSSはシンボリックリンクでfrontと同じにする。&lt;br /&gt;
ln -s ../css cssを使う。&lt;br /&gt;
&lt;br /&gt;
ヘッダーとフッターをpartial化。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;layout
&amp;lt;?php include_partial(&quot;global/header&quot;);?&amp;gt;

_header
&amp;lt;div id=&quot;header&quot;&amp;gt;
&amp;lt;a href=&quot;/&quot;&amp;gt;SHONANBBS&amp;lt;/a&amp;gt; &amp;nbsp;
ようこそ&amp;lt;?php echo $sf_user-&amp;gt;getAttribute(&#39;nickname&#39;,NULL,sfConfig::get(&#39;sf_session_name&#39;));?&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
あとはパンくずとslotでつける。&lt;br /&gt;
ほかレイアウト調整。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
&lt;br /&gt;
認証と権限の解説復習。&lt;br /&gt;
てかprint_r($this-&gt;getUser());こええええ。&lt;br /&gt;
丸わかりすぎ。&lt;br /&gt;
&lt;br /&gt;
CCSでヘッダの下に追記&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#headerLeft {
width: 200px;
float:left
      }
#headerRight {
width: 200px;
float:right;
text-align:right;
      }
&lt;/pre&gt;&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
mypageにログアウト、indexに遷移する処理。&lt;br /&gt;
ここはまんまbackendと同じなので省略～。&lt;br /&gt;
&lt;br /&gt;
sessionからmember_idを元にデータを引き出す。&lt;br /&gt;
今日の材料はメールでデータがあるからそれ参考で。&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
commentテーブルにmemberテーブルと紐付けるテーブル追加&lt;br /&gt;
ALTER TABLE comment ADD member_id int;&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
comment_editを表示させる。&lt;br /&gt;
ケアレスミスに数時間＿|￣|○&lt;br /&gt;
action側&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php

/**
 * comment_edit actions.
 *
 * @package    bbs2
 * @subpackage comment_edit
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
class comment_editActions extends sfActions
{
 /**
  * Executes index action
  *
  */
 public function executeInput()
 {

  $comment_id = $this-&amp;gt;getRequestParameter(&#39;id&#39;);
  $this-&amp;gt;comment = CommentPeer::retrieveByPK($comment_id);


  if ($this-&amp;gt;comment != &#39;&#39; &amp;&amp;
  $this-&amp;gt;comment-&amp;gt;getMemberId() !=
  $this-&amp;gt;getUser()-&amp;gt;getAttribute(&#39;member_id&#39;, null,
  sfConfig::get(&#39;sf_session_name&#39;))){
   $this-&amp;gt;redirect(&#39;http://www.shonanbbs.com&#39;);

  }
  return sfView::SUCCESS;
 }
 public function executeConfirm()
 {
  $this-&amp;gt;id = $this-&amp;gt;getRequestParameter(&#39;id&#39;);
  $this-&amp;gt;content = $this-&amp;gt;getRequestParameter(&#39;content&#39;);

  return sfView::SUCCESS;
 }

 public function executeResult()
 {
  $content = $this-&amp;gt;getRequestParameter(&#39;content&#39;);

  $comment_id = $this-&amp;gt;getRequestParameter(&#39;id&#39;);
  $comment = CommentPeer::retrieveByPK($comment_id);

  $comment-&amp;gt;setContent($content);

  $comment-&amp;gt;save();

  return sfView::SUCCESS;
 }
}

&lt;/pre&gt;&lt;br /&gt;
input&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php slot(&#39;pankuzu&#39;);?&amp;gt;
&amp;lt;?php echo link_to(&quot;HOME&quot;,&quot;/mypage&quot;)?&amp;gt; &amp;gt; コメント編集&amp;lt;?php end_slot();?&amp;gt;

&amp;lt;?php slot(&#39;sidemenu&#39;);?&amp;gt;
&amp;lt;?php include_partial(&quot;global/menu&quot;, array(&#39;now&#39; =&amp;gt; &#39;home&#39;));?&amp;gt;
&amp;lt;?php end_slot();?&amp;gt;

登録情報更新
&amp;lt;br&amp;gt;

&amp;lt;div class=&quot;tblData&quot;&amp;gt;
&amp;lt;?php echo form_tag(&quot;/comment_edit/confirm&quot;,&quot;method=post multipart=true&quot;) ?&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;td&amp;gt;コメント：&amp;lt;?php echo input_tag(&quot;content&quot;, $comment-&amp;gt;getContent() , array(&quot;size =&amp;gt; 20&quot;))?&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;id&#39;, $comment-&amp;gt;getId());?&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;確認&quot;&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
confirm&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;div class=&quot;tblData&quot;&amp;gt;
&amp;lt;?php echo form_tag(&quot;/comment_edit/result&quot;,&quot;method=post multipart=true&quot;) ?&amp;gt;
&amp;lt;table&amp;gt;
        &amp;lt;tr&amp;gt;
 &amp;lt;th&amp;gt;名前&amp;lt;/th&amp;gt;
 &amp;lt;td&amp;gt;&amp;lt;?php echo $content?&amp;gt;
 &amp;lt;?php echo input_hidden_tag(&#39;content&#39;, $content);?&amp;gt;

 &amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;id&#39;,$id);?&amp;gt;
                &amp;lt;?php echo submit_tag(&#39;完了&#39;);?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
明日から実習&lt;br /&gt;
&lt;br /&gt;
水曜午後から企画発表&lt;br /&gt;
&lt;br /&gt;
・どのようなアプリにするか&lt;br /&gt;
・DB構成&lt;br /&gt;
・可能ならページ遷移&lt;br /&gt;
・アプリケーション、モジュールの構成</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/6752436545448534602/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/411.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/6752436545448534602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/6752436545448534602'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/411.html' title='4/11覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-7716236156761438869</id><published>2011-04-08T17:51:00.005+09:00</published><updated>2011-04-08T18:34:34.161+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="アクセス制御"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/8覚書</title><content type='html'>1時間目&lt;br /&gt;
CSS適用ができねえええええ。&lt;br /&gt;
とおもったら。&lt;br /&gt;
ln -s ../css css&lt;br /&gt;
自分のログで大文字で書いてた(ﾃﾍﾟﾍﾟﾛ☆&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
comment_listで&lt;br /&gt;
コメントと名前とカテゴリの編集をできるようにする。ヒントはreply_add。&lt;br /&gt;
exで画像のようだがそこまではﾑﾘﾎﾟ。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
☆symfonyのアクセス制御&lt;br /&gt;
管理画面、マイページなどのように認証されたユーザで&lt;br /&gt;
特定の権限を持つユーザだけが閲覧や操作を行えるようにする。&lt;br /&gt;
&lt;br /&gt;
/bbs2/lib/model/MemberPeer.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;static public function retrieveByPassword($mailaddress,$password) {
  $c = new Criteria();
  $c-&amp;gt;add(self::MAILADDRESS, $mailaddress);
  $c-&amp;gt;add(self::PASSWORD, $password);
  return self::doSelectOne($c);
 }
&lt;/pre&gt;&lt;br /&gt;
4時間目&lt;br /&gt;
☆認証&lt;br /&gt;
symfonyは、アクセスしているユーザに関する情報はユーザークラス($this-&gt;getUser())が持っている。&lt;br /&gt;
ユーザクラスに権限の情報を付与・削除することと、各アプリケーションごと、&lt;br /&gt;
モジュールごとのsecurity.ymlでアクセス制御を実現する。&lt;br /&gt;
&lt;br /&gt;
認証済みかどうか  $this-&gt;getUser()-&gt;isAuthenticated();&lt;br /&gt;
どの権限を持つかどうか  $this-&gt;getUser()-&gt;hasCredential(&quot;member&quot;);&lt;br /&gt;
&lt;br /&gt;
この二つを主に利用する。&lt;br /&gt;
&lt;br /&gt;
制限のルールを書くのはsecurity.ymlで行う。&lt;br /&gt;
/backend/config/security.ymlに以下のように記述&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;all:
  is_secure: on #認証済みの必要がある
  credentials: [ member ] #必要な権限を設定する
&lt;/pre&gt;モジュールにもsecurity.ymlを置いて上記のように記述することでモジュールごとの&lt;br /&gt;
権限管理を行うこともできる。&lt;br /&gt;
あと複数設けることもできるが、orにしたい場合は&lt;br /&gt;
credentials: [[member,admin]]のようになる。 &lt;br /&gt;
&lt;br /&gt;
backendにlogoutモジュール作成して&lt;br /&gt;
ログアウト処理。backendからアウトしてTOPへ。&lt;br /&gt;
action側（しか要らない）&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeIndex()
  {
 //未認証にする
   $this-&amp;gt;getUser()-&amp;gt;setAuthenticated(false);
 //権限をクリア
 $this-&amp;gt;getUser()-&amp;gt;clearCredentials();
 //TOPへ移動
 $this-&amp;gt;redirect(&#39;http://www.shonanbbs.com&#39;&#39;);
   return sfView::SUCCESS;
  }
&lt;/pre&gt;ログイン処理→ログインできたらログアウト→defaultへ遷移。&lt;br /&gt;
ログイン処理＋α　TOPからのリンク。をやりました。まとめソース↓&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
&lt;br /&gt;
admin_ynカラム追加してif文で判定。&lt;br /&gt;
&lt;br /&gt;
$this-&gt;getUser()-&gt;setAttribute(&#39;member_id&#39;, $member-&gt;getId(),sfConfig::get(&#39;sf_session_name&#39;));&lt;br /&gt;
第3引数はセッション内に名前空間（name_space）を必ず設定。&lt;br /&gt;
区切りでセットすることで区切りごと削除が可能となる。&lt;br /&gt;
sesstion_nameはプロジェクト直下のconfigのsetting.ymlに記述。&lt;br /&gt;
&lt;br /&gt;
☆練習問題&lt;br /&gt;
mypageアプリケーション作成&lt;br /&gt;
権限Credentialはmemberを指定&lt;br /&gt;
adminとmemberでログインしたあとの遷移を変更。&lt;br /&gt;
&lt;b&gt;てか最終的な情報しか残せなかたよ。ごめんよー。&lt;/b&gt;&lt;br /&gt;
frontのloginモジュール、action側&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeIndex()
        {
                $this-&amp;gt;mailaddress = $this-&amp;gt;getRequestParameter(&#39;mailaddress&#39;);
                $this-&amp;gt;password = $this-&amp;gt;getRequestParameter(&#39;password&#39;);

                if ($this-&amp;gt;mailaddress != &#39;&#39; &amp;&amp; $this-&amp;gt;password != &#39;&#39;) {
  //メンバーテーブルに入力されたメールアドレス、パスワードで
  //指定出来る行があるかどうか
  //MemberPeerに$this-&amp;gt;mailaddress, $this-&amp;gt;passwordの引数を渡す
                 $member = MemberPeer::retrieveByPassword
                 ($this-&amp;gt;mailaddress, $this-&amp;gt;password);

                 if ($member){

  // ログイン状態にする
  //認証処理は$this-&amp;gt;getUser()で受け取れるuserオブジェクトで
  //設定できる。セッション名をいちいち変えなくていい。
  $this-&amp;gt;getUser()-&amp;gt;setAuthenticated(true);

  //権限をクリア
  $this-&amp;gt;getUser()-&amp;gt;clearCredentials();
  // 会員情報をセッションにセット
  $this-&amp;gt;getUser()-&amp;gt;setAttribute(&#39;member_id&#39;,
  $member-&amp;gt;getId(),sfConfig::get(&#39;sf_session_name&#39;));
  $this-&amp;gt;getUser()-&amp;gt;setAttribute(&#39;nickname&#39;,
  $member-&amp;gt;getNickname(), sfConfig::get(&#39;sf_session_name&#39;));

   if($member-&amp;gt;getAdminYn() == &#39;y&#39;) {

   //admin権限付与
   $this-&amp;gt;getUser()-&amp;gt;addCredential(&#39;admin&#39;);
   $this-&amp;gt;redirect(&#39;/backend&#39;);

  }elseif ($member-&amp;gt;getAdminYn() == &#39;n&#39;) {

   //ここでは一般会員権限のみ付与
   $this-&amp;gt;getUser()-&amp;gt;addCredential(&#39;member&#39;);

   // 会員情報をセッションにセット
   $this-&amp;gt;getUser()-&amp;gt;setAttribute(&#39;member_id&#39;,
   $member-&amp;gt;getId(),sfConfig::get(&#39;sf_session_name&#39;));
   $this-&amp;gt;getUser()-&amp;gt;setAttribute(&#39;nickname&#39;,
   $member-&amp;gt;getNickname(), sfConfig::get(&#39;sf_session_name&#39;));

   $this-&amp;gt;redirect(&#39;/mypage&#39;);
   }
  }
   $this-&amp;gt;errormsg = &quot;あてはまるユーザが登録されていません&quot;;
 }
                return sfView::SUCCESS;
        }
&lt;/pre&gt;&lt;br /&gt;
frontのloginモジュール、index側&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php slot(&#39;pankuzu&#39;);?&amp;gt;HOME&amp;lt;?php end_slot();?&amp;gt;

&amp;lt;?php slot(&#39;title&#39;);?&amp;gt;
TOP
&amp;lt;?php end_slot();?&amp;gt;

&amp;lt;?php slot(&#39;sidemenu&#39;);?&amp;gt;
&amp;lt;?php include_partial(&quot;global/menu&quot;, array(&#39;now&#39; =&amp;gt; &#39;login&#39;));?&amp;gt;
&amp;lt;?php end_slot();?&amp;gt;

&amp;lt;?php use_helper(&#39;Validation&#39;) ?&amp;gt;

&amp;lt;?php echo form_tag(&#39;login/index&#39;);?&amp;gt;
&amp;lt;div class=&quot;tblData&quot;&amp;gt;

&amp;lt;?php if ($errormsg != &#39;&#39;):?&amp;gt;
&amp;lt;div&amp;gt;&amp;lt;?php echo $errormsg;?&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;?php endif;?&amp;gt;

&amp;lt;table&amp;gt;
        &amp;lt;tr&amp;gt;
                &amp;lt;th&amp;gt;メールアドレス&amp;lt;/th&amp;gt;

                &amp;lt;td
                &amp;lt;?php if ($sf_request-&amp;gt;haserror(&#39;mailaddress&#39;)) :?&amp;gt;
                 style=&quot;background-color:#ffcccc;&quot;
                 &amp;lt;?php endif;?&amp;gt;&amp;gt;

                 &amp;lt;?php echo input_tag(&#39;mailaddress&#39;, $mailaddress, array(&#39;size&#39; =&amp;gt; 50));?&amp;gt;
                &amp;lt;?php echo form_error(&#39;mailaddress&#39;);?&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                &amp;lt;th&amp;gt;パスワード&amp;lt;/th&amp;gt;
                &amp;lt;td&amp;gt;&amp;lt;?php echo input_tag(&#39;password&#39;, $password, array(&#39;size&#39; =&amp;gt; 50));?&amp;gt;
                &amp;lt;?php echo form_error(&#39;password&#39;);?&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
                &amp;lt;?php echo submit_tag(&#39;ログインする&#39;);?&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
mypageログイン時TOP表示。&lt;br /&gt;
mypageのsecurity.yml&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;default:
  is_secure: on
  credentials: [ member ]
&lt;/pre&gt;&lt;br /&gt;
action側&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeIndex()
  {
   $this-&amp;gt;getUser() -&amp;gt; getAttribute(&#39;member_id&#39;,
NULL,sfConfig::get(&#39;sf_session_name&#39;));

 $this-&amp;gt;member = MemberPeer::retrieveByPK($member_id);
 //$this-&amp;gt;comments = CommentPeer::retrieveByComment_Id($cooment_id)
 return sfView::SUCCESS;
  }
&lt;/pre&gt;&lt;br /&gt;
mypageのindex。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php slot(&#39;title&#39;);?&amp;gt;
MYPAGE
&amp;lt;?php end_slot();?&amp;gt;

&amp;lt;?php slot(&#39;sidemenu&#39;);?&amp;gt;
&amp;lt;?php include_partial(&quot;global/menu&quot;, array(&#39;now&#39; =&amp;gt; &#39;member_add&#39;));?&amp;gt;
&amp;lt;?php end_slot();?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
mypageのaction。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeIndex()
  {
   $this-&amp;gt;getUser() -&amp;gt; getAttribute(&#39;member_id&#39;,
NULL,sfConfig::get(&#39;sf_session_name&#39;));

 $this-&amp;gt;member = MemberPeer::retrieveByPK($member_id);
 //$this-&amp;gt;comments = CommentPeer::retrieveByComment_Id($cooment_id)
 return sfView::SUCCESS;
  }
&lt;/pre&gt;奇跡といいたい。&lt;br /&gt;
でけた。&lt;br /&gt;
&lt;br /&gt;
ていうか現状ではlogoutがbackendしかないからmypageでログアウトするのって&lt;br /&gt;
ログインしなおすんだよね･･････権限で判定？？&lt;br /&gt;
&lt;br /&gt;
補足設定&lt;br /&gt;
backendのsettings.ymlを下記に変更。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#認証できない時はloginページに遷移
    login_module:           default   # To be called when a non-authenticated user
    login_action:           login     # Tries to access a secure page
#管理者権限が無い場合はエラー表示
    secure_module:          default   # To be called when a user doesn&#39;t have
    secure_action:          secure    # The credentials required for an action
&lt;/pre&gt;sessionの有効期限はsettings.ymlの95行目&lt;br /&gt;
#    timeout:                1800       # Session timeout, in seconds&lt;br /&gt;
だよー。&lt;br /&gt;
&lt;br /&gt;
来週は自分のプロフィールや投稿のみ編集可能にする。&lt;br /&gt;
とバリデートするそーな。&lt;br /&gt;
&lt;br /&gt;
自分的お勧め&lt;br /&gt;
&lt;a href=&quot;http://php.e1blue.net/term/category.php?categoryID=1&quot;&gt;PHPエラーの意味を教えてくれるところ&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/7716236156761438869/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/48.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7716236156761438869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7716236156761438869'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/48.html' title='4/8覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-190612614747263974</id><published>2011-04-07T22:30:00.000+09:00</published><updated>2011-04-07T22:30:18.849+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="カウント"/><category scheme="http://www.blogger.com/atom/ns#" term="コンポーネント"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/7覚書</title><content type='html'>腰痛で火曜休み、今日は歯医者で遅刻。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
1.返信するの横に詳細を見るのリンク追加。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php echo link_to(&quot;詳細を見る&quot;, &quot;@commentdatail?id=&quot;.$comment-&amp;gt;getId())?&amp;gt;
&lt;/pre&gt;2.default/datailでコメント詳細ページ表示&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;action側
 public function executeDatail()
 {
    //GETで渡されてくるコメントIDとか
    $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
    $this-&amp;gt;comment = CommentPeer::retrieveByPK($id);
    $this-&amp;gt;photo = $this-&amp;gt;getRequestParameter(&quot;photo&quot;);

  return sfView::SUCCESS;
 }

datilSussess.php

&amp;lt;div class=&quot;box&quot;&amp;gt;
&amp;lt;?php echo $comment-&amp;gt;getNickname();?&amp;gt;の投稿&amp;lt;br&amp;gt;

 &amp;lt;?php if($comment-&amp;gt;getPhoto()):?&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php echo image_tag(&quot;/images/comment/&quot;.$comment-&amp;gt;getPhoto());?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php endif;?&amp;gt;
 &amp;lt;?php if($comment-&amp;gt;getPhoto2()):?&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php echo image_tag(&quot;/images/comments2/&quot;.$comment-&amp;gt;getPhoto2());?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php endif;?&amp;gt;
 &amp;lt;?php echo $comment-&amp;gt;getContent();?&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php echo $comment-&amp;gt;getCreatedAt();?&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;3.commentテーブルにaccess_cntカラム追加&lt;br /&gt;
ALTER TABLE comment ADD access_cnt int;&lt;br /&gt;
&lt;br /&gt;
4.詳細ページを開くごとにアクセス数に＋1させて、&lt;br /&gt;
shared/access_cntコンポーネントで、アクセス数多い順のコメント5件表示&lt;br /&gt;
午前中にreply_cntでやったところらしい。&lt;br /&gt;
&lt;br /&gt;
CommentPeer&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt; static public function retrieveAccessRanking() {
  $c = new Criteria();
  $c-&amp;gt;addDescendingOrderByColumn(self::ACCESS_CNT);
  $c-&amp;gt;setlimit(5);
  return self::doSelect($c);
 }
&lt;/pre&gt;&lt;br /&gt;
action&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
 public function executeDatail()
 {
    //GETで渡されてくるコメントID
    $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
    $this-&amp;gt;comment = CommentPeer::retrieveByPK($id);
    $this-&amp;gt;photo = $this-&amp;gt;getRequestParameter(&quot;photo&quot;);


  //現在のアクセスカウントを取得
    $access_cnt = $this-&amp;gt;comment-&amp;gt;getAccessCnt();

    //取得したアクセスカウントに+1をセット
  $this-&amp;gt;comment-&amp;gt;setAccessCnt($access_cnt + 1);

  //更新
  $this-&amp;gt;comment-&amp;gt;save();

    return sfView::SUCCESS;
 }
&lt;/pre&gt;&lt;br /&gt;
5時間目上記答え合わせ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
exerciseモジュール作成。indexからstage2へgetとpostの処理を再度勉強。&lt;br /&gt;
自信が無い人はstage10ぐらいまでgetとpostで送り続けるのをやろう。&lt;br /&gt;
これができないと今後ついていけなくなるそうです。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/190612614747263974/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/47.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/190612614747263974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/190612614747263974'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/47.html' title='4/7覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-4288088359004210777</id><published>2011-04-04T17:08:00.000+09:00</published><updated>2011-04-04T17:08:29.066+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="ルーティング"/><category scheme="http://www.blogger.com/atom/ns#" term="掲示板2"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><category scheme="http://www.blogger.com/atom/ns#" term="部品化"/><title type='text'>4/4覚書</title><content type='html'>1時間目～2時間目&lt;br /&gt;
☆複数画像UPとヘルパー&lt;br /&gt;
できてる人はアンケート&lt;br /&gt;
enquete_add&lt;br /&gt;
名前&lt;br /&gt;
性別（ラジオボタン）&lt;br /&gt;
興味のあること（チェックボックス）&lt;br /&gt;
コメント&lt;br /&gt;
画像&lt;br /&gt;
SQL&lt;br /&gt;
CREATE TABLE enquete(&lt;br /&gt;
id int not null auto_increment,&lt;br /&gt;
name text, &lt;br /&gt;
gender int, &lt;br /&gt;
hobby int ,&lt;br /&gt;
content text, &lt;br /&gt;
photo text, &lt;br /&gt;
created_at datetime,&lt;br /&gt;
primary key(id) );&lt;br /&gt;
&lt;br /&gt;
ここで時間切れ。自習だぬー。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
☆ルーティング&lt;br /&gt;
ルーティングとは、URL マッピングとも呼ばれ、URLから判断して&lt;br /&gt;
使用するmoduleを決定する仕組み。&lt;br /&gt;
&lt;b&gt;アクセスした時点でどこに飛ばすか&lt;/b&gt;、のコントロール機能。&lt;br /&gt;
&lt;br /&gt;
場所はプロジェクト/apps/アプリケーション名/config/routing.yml&lt;br /&gt;
ルーティング名称（自由）:&lt;br /&gt;
  url: URL&lt;br /&gt;
  param: {module: モジュール名, action: アクション名}&lt;br /&gt;
&lt;br /&gt;
※default_symfonyの項目は保留&lt;br /&gt;
※URLに*でワイルドカード指定おｋ&lt;br /&gt;
&lt;br /&gt;
ニュースモジュール作成とsymfony cc&lt;br /&gt;
symfony init-module front news&lt;br /&gt;
return sfView::SUCCESS;&lt;br /&gt;
&lt;br /&gt;
/news/listにURLを変えるとほかページのリンク修正がめんどい。&lt;br /&gt;
そのときにルーティングで処理すると一括でできる。&lt;br /&gt;
&lt;b&gt;デフォルトのURLを変更したいときにルーティングを使う。必要なければ使わなくてよい。&lt;br /&gt;
※入力ルールparamでは：の後、半角スペース必須。&lt;br /&gt;
つけたいルーティングは# default rules（ここから下削除不可）の上に置く。&lt;/b&gt;&lt;br /&gt;
実例&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#news/listにURL変更。ルーティングルールは上位ほど強くなる。
newslist:
  url:  /news/list
  param: { module: news, action: index }
&lt;/pre&gt;※&lt;b&gt;routing.yml変更後は必ずsymfony cc&lt;/b&gt;&lt;br /&gt;
表示しないルールをつけることもできる。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;newslist:
  url:  /news
  param: { action: error404 }
&lt;/pre&gt;&lt;br /&gt;
IDの受け取り&lt;br /&gt;
コントローラー側&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  public function executeDatail()
  {
   print $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
   //$this-&amp;gt;id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
   return sfView::SUCCESS;
  }
&lt;/pre&gt;routing.yml側&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;newsdatail:
  url:  /news/datail/:id
  param: { module: news, action: datail }
&lt;/pre&gt;http://www.shonanbbs.com/news/datail/33とか&lt;br /&gt;
http://www.shonanbbs.com/news/datail/1111とか入れると数字が出てくるよ&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;@ルーティング名&lt;/b&gt;にするとそのルーティング名に則ったURLにできる。&lt;br /&gt;
値はGETで示す。&lt;br /&gt;
&lt;br /&gt;
newsモジュールに以下記述&lt;br /&gt;
&lt;?php echo link_to(&quot;詳細はこちら&quot;,&quot;@newsdatail?id=10&quot;)?&gt;&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
部品化&lt;br /&gt;
パーシャル&lt;br /&gt;
一番簡単な部品化の方法で、主にロジックを含まないテンプレートを部品化する際に使用する。&lt;br /&gt;
指定したモジュール名/templatesディレクトリに、_テンプレート名.phpというファイルを作成する。&lt;br /&gt;
読み込むコード&lt;br /&gt;
&lt;?php include_partial(&quot;モジュール名/ テンプレート名&quot;, &quot;渡す値&quot;);?&gt;&lt;br /&gt;
&lt;br /&gt;
実例&lt;br /&gt;
layout.phpの＜div id=&quot;contentRight&quot;＞直下に記述。&lt;br /&gt;
&lt;?php include_partial(&quot;global/menu&quot;);?&gt;&lt;br /&gt;
モジュール名にglobalにすると一番上のモジュールを指定できる。&lt;br /&gt;
templates直下に\menu.php作成し、&lt;br /&gt;
MENU&lt;br&gt;&lt;br /&gt;
&lt;a href=&quot;/member_add/input&quot;&gt;会員登録&lt;/a&gt;&lt;br&gt;&lt;br /&gt;
とかを切り取って貼り付け。&lt;br /&gt;
&lt;br /&gt;
◆練習問題&lt;br /&gt;
ヘッダーとフッターをpartial化&lt;br /&gt;
◆練習問題&lt;br /&gt;
sharedモジュール作成、templateはmessageでお知らせ文作成&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php include_partial(&quot;shared/message&quot;);?&amp;gt;

_message.php

&amp;lt;div style=&quot;boader: 2px; padding: 10px; background-color:#DF8713; margin:10px 0px;&quot;&amp;gt;
管理者からの大切なお知らせ。
こちらをごらんください。
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
member_addとか無いからlayoutにはっつけちゃったYO。&lt;br /&gt;
&lt;br /&gt;
☆スロット&lt;br /&gt;
templateからlayoutを操作したい場合に利用&lt;br /&gt;
◆練習。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;layoutでtemplate作成。
&amp;lt;div id=&quot;pankuzu&quot;&amp;gt;
&amp;lt;?php include_slot(&quot;pankuzu&quot;);?&amp;gt;
&amp;lt;/div&amp;gt;
indexSuccessでインクルード。
&amp;lt;?php slot(&#39;pankuzu&#39;);?&amp;gt;
HOME
&amp;lt;?php end_slot();?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
5時間目&lt;br /&gt;
◆練習問題　パンくずを実装&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;ヘルパー練習ページでも適用できるよ
&amp;lt;?php slot(&#39;pankuzu&#39;);?&amp;gt;
&amp;lt;?php echo link_to(&quot;HOME&quot;,&quot;/member/list&quot;)?&amp;gt;&amp;gt;ヘルパーの練習
&amp;lt;?php end_slot();?&amp;gt;

CSS
#pankuzu {
boder-bottom:1px dotted #ddd;
padding-bottom:5px;
}
&lt;/pre&gt;◆練習問題　タイトルを変えてみよう&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;layout.phpの&amp;lt;?php include_title() ?&amp;gt;を
&amp;lt;title&amp;gt;&amp;lt;?php include_slot(&quot;title&quot;) ?&amp;gt;&amp;lt;/title&amp;gt;に変える
indexSuccessはこう
&amp;lt;?php slot(&#39;title&#39;);?&amp;gt;
TOP | SHONANBBS
&amp;lt;?php end_slot();?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
◆補足。関数利用可能&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;titleというスロットがあればtemplateを読み込むifが使える。
&amp;lt;title&amp;gt;&amp;lt;?php if(has_slot(&quot;title&quot;)):?&amp;gt;
&amp;lt;?php include_slot(&quot;title&quot;) ?&amp;gt; | &amp;lt;?php endif;?&amp;gt;
SHONANBBS&amp;lt;/title&amp;gt;

templateがより省略できる
&amp;lt;?php slot(&#39;title&#39;);?&amp;gt;
TOP
&amp;lt;?php end_slot();?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
◆スロットとパーシャルの組み合わせ&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;layoutのパーシャル切り取り、以下に変更
&amp;lt;?php include_slot(&quot;sidemenu&quot;);?&amp;gt;

&amp;lt;?php slot(&#39;sidemenu&#39;);?&amp;gt;
&amp;lt;?php include_partial(&quot;global/menu&quot;, array(&#39;now&#39; =&amp;gt; &#39;top&#39;));?&amp;gt;
&amp;lt;?php end_slot();?&amp;gt;

ヘルパーページ
&amp;lt;?php slot(&#39;sidemenu&#39;);?&amp;gt;
&amp;lt;?php include_partial(&quot;global/menu&quot;, array(&#39;now&#39; =&amp;gt; &#39;help&#39;));?&amp;gt;
&amp;lt;?php end_slot();?&amp;gt;

_menu.php
&amp;lt;?php if ($now == &quot;top&quot;):?&amp;gt;
&amp;lt;a href=&quot;/&quot; class=&quot;nowpage&quot;&amp;gt;TOP&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php else :?&amp;gt;
&amp;lt;a href=&quot;/&quot;&amp;gt;TOP&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php endif;?&amp;gt;

&amp;lt;?php if ($now == &quot;help&quot;):?&amp;gt;
&amp;lt;a href=&quot;/default/help&quot; class=&quot;nowpage&quot;&amp;gt;ヘルパーの使い方&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php else :?&amp;gt;
&amp;lt;a href=&quot;/default/help&quot;&amp;gt;ヘルパーの使い方&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php endif;?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
6時間目&lt;br /&gt;
&lt;br /&gt;
◆練習もっかいパーシャル。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php include_partial(&quot;global/ad&quot;);?&amp;gt;

&amp;lt;div class=&quot;ad&quot;&amp;gt;
広告です。
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
☆コンポーネント&lt;br /&gt;
パーシャルにロジックが加わったものがコンポーネント。&lt;br /&gt;
部品化したいが、その部品を作成するためにはデータベースからデータを取得する&lt;br /&gt;
必要がある場合に使用される。&lt;br /&gt;
&lt;br /&gt;
◆練習問題&lt;br /&gt;
member_listモジュール無い人は追加&lt;br /&gt;
sidemenuにmemberlistを出してみよう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;bbs2/apps/front/modules/shared/templatesに_memberlist.php作成

メンバー一覧
&amp;lt;?php foreach ($members as $member):?&amp;gt;
&amp;lt;div class=&quot;sidelist&quot;&amp;gt;
&amp;lt;?php echo $member-&amp;gt;getNickname();?&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;?php endforeach;?&amp;gt;

bbs2/apps/front/modules/shared/actionsにcomponents.class.php作成
&amp;lt;?php
class SharedComponents extends sfComponents
{
 public function executeMemberlist(){
  $c = new Criteria();
  $this-&amp;gt;members = MemberPeer::doselect($c);
 }
}
&lt;/pre&gt;&lt;br /&gt;
◆練習問題&lt;br /&gt;
最新のコメント5件をsidemenuに出してみよう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;bbs2/apps/front/modules/shared/templatesに_newreplyt.php作成

最新の返信
&amp;lt;?php foreach ($replys as $reply):?&amp;gt;
&amp;lt;div Class=&quot;sidelist&quot;&amp;gt;
&amp;lt;?php echo $reply-&amp;gt;getContent();?&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;?php endforeach;?&amp;gt;

bbs2/apps/front/modules/shared/actions/components.class.phpの
memberlistの直下に作成

 public function executeNewreply(){
  $c = new Criteria();
  $c-&amp;gt;addDescendingOrderByColumn(ReplyPeer::CREATED_AT);
  $c-&amp;gt;setlimit(5);
  $this-&amp;gt;replys = ReplyPeer::doselect($c);
 }
&lt;/pre&gt;&lt;br /&gt;
あと_menuの各項目に＜div class=&quot;sidelist&quot;&gt;つけてねー。&lt;br /&gt;
今日は何とかついてこれた～～～～。ふぅ。&lt;br /&gt;
&lt;br /&gt;
んで追加のCSS。適宜応用よろ。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#pankuzu {
boder-bottom:1px dotted #ddd;
padding-bottom:5px;
}
.nowpage {
background-color:#FAB6D6;
padding:1px;
margin-bottom:1px;
}
.ad {
 border:1px solid #ddd;
 padding:10px;
 background-color:#D1DEE0;
}

.sidelist {
 border-bottom:1px solid #ddd;
 padding:5px 0px;
 }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/4288088359004210777/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/44.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/4288088359004210777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/4288088359004210777'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/44.html' title='4/4覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-1913112670280189996</id><published>2011-04-04T12:11:00.005+09:00</published><updated>2011-04-04T13:02:08.155+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="ヘルパー"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>4/1覚書</title><content type='html'>1時間目&lt;br /&gt;
replyに画像追加の続き。&lt;br /&gt;
ex.複数画像の続き&lt;br /&gt;
&lt;br /&gt;
2時間目も同様&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
☆ヘルパー&lt;br /&gt;
&lt;br /&gt;
no_script_nameをONにすることでフロントコントローラーがURLに出なくなる。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
ヘルパー続き&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
ヘルパーをbbs2に適用&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
schema実行後に生成されるomディレクトリの子クラスに変更点を記述。&lt;br /&gt;
親クラスには記述しない。&lt;br /&gt;
&lt;br /&gt;
来週はreply以外のデータ参照もあるそうな。&lt;br /&gt;
&lt;br /&gt;
現時点ソース。カテゴリ未完成だよー；&lt;br /&gt;
写真複数にするときはphotoカラム追加と&lt;br /&gt;
/web/images/comment2とか複数必要だよー。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;コントロール側

 public function executeIndex()
 {
  print_r(sfConfig::get(&#39;sf_support_mail&#39;));


  //commentテーブル全行表示降順
  //昇順　-&amp;gt;addAscendingOrderByColumn(column);
  $c = new Criteria();
  $c-&amp;gt;addDescendingOrderByColumn(CommentPeer::CREATED_AT);
  $this-&amp;gt;comments = CommentPeer::doSelect($c);


  return sfView::SUCCESS;

 }


 public function executeConfirm()
 {
  $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
  $this-&amp;gt;coment = $this-&amp;gt;getRequestParameter(&quot;coment&quot;);
  $this-&amp;gt;categorie = $this-&amp;gt;getRequestParameter(&quot;categorie&quot;);
  $photo1 = $this-&amp;gt;getRequest()-&amp;gt;getFile(&#39;photo1&#39;);
  $photo2 = $this-&amp;gt;getRequest()-&amp;gt;getFile(&#39;photo2&#39;);


 // sleepさせてrootで/tmpを見る
 //sleep(10);

 //画像の一時ファイル判定
 if($photo1[&quot;tmp_name&quot;] != &#39;&#39;) {

  //保存する画像名はセッションID生成し付与
  session_regenerate_id();
  //myUtil::getFileExtで拡張子判別。帰り値は._gif._png._jpg
  $tmpname1 = &#39;photo1_&#39; . session_id() .myUtil::getFileExt( $photo1[&quot;tmp_name&quot;] );
  //web/uploads/tmpへ画像を移動する
  $this-&amp;gt;getRequest()-&amp;gt;moveFile(&#39;photo1&#39;,sfConfig::get(&#39;sf_upload_dir&#39;).&#39;/tmp/&#39;.$tmpname1);

  //templateにパスを渡している
  $this-&amp;gt;photo1 = $tmpname1;
 }

  //画像の一時ファイル判定
 if($photo2[&quot;tmp_name&quot;] != &#39;&#39;) {

  //保存する画像名はセッションID生成し付与
  session_regenerate_id();
  //myUtil::getFileExtで拡張子判別。帰り値は._gif._png._jpg
  $tmpname2 = &#39;photo2_&#39; . session_id() .myUtil::getFileExt( $photo2[&quot;tmp_name&quot;] );
  //web/uploads/tmpへ画像を移動する
  $this-&amp;gt;getRequest()-&amp;gt;moveFile(&#39;photo2&#39;,sfConfig::get(&#39;sf_upload_dir&#39;).
&#39;/tmp/&#39;.$tmpname2);

  //templateにパスを渡している
  $this-&amp;gt;photo2 = $tmpname2;
 }



  return sfView::SUCCESS;
 }

 public function executeHelp()
 {
  return sfView::SUCCESS;
 }

 public function executeResult()
 {

  //nameとmailを変数にして渡す。
  $name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
  $coment = $this-&amp;gt;getRequestParameter(&quot;coment&quot;);
  $categorie = $this-&amp;gt;getRequestParameter(&quot;categorie&quot;);


  //insertのmember
  //インスタンス化。空のオブジェクトを生成。
  $comment = new Comment();
  //変数にした名前とメールを入力。idカラムは自動なので不要。
  //カラムにcreated_at、update_atがあればSymfonyが自動で一緒にやってくれる。
  $comment-&amp;gt;setNickname(&quot;$name&quot;);
  $comment-&amp;gt;setContent(&quot;$coment&quot;);
  $comment-&amp;gt;setCategorie(&quot;$categorie&quot;);
  //insert文発行
  $comment-&amp;gt;save();

  //画像データを変数にして渡す
  $photo1 = $this-&amp;gt;getRequestParameter(&#39;photo1&#39;);
  $photo2 = $this-&amp;gt;getRequestParameter(&#39;photo2&#39;);

  //画像の存在判定
  if($photo1 != &#39;&#39;) {

   ///uploads/tmp/&#39;.$photo1から画像を取得
   $src = sfConfig::get(&#39;sf_web_dir&#39;).&#39;/uploads/tmp/&#39;.$photo1;
   //最新（投稿と同一）のidを取得（autoincrement稼動時）
   $saveName = $comment-&amp;gt;getId().myUtil::getFileExt($src);
   //TEMPから/images/comment/&quot;.$saveNameへ保存
   $dst = sfConfig::get(&#39;sf_web_dir&#39;).&quot;/images/comment/&quot;.$saveName;

   rename($src, $dst);
   $comment-&amp;gt;setPhoto($saveName);
   $comment-&amp;gt;save();

  }

  if($photo2 != &#39;&#39;) {

   ///uploads/tmp/&#39;.$photo2から画像を取得
   $src = sfConfig::get(&#39;sf_web_dir&#39;).&#39;/uploads/tmp/&#39;.$photo2;
   //最新（投稿と同一）のidを取得（autoincrement稼動時）
   $saveName = $comment-&amp;gt;getId().myUtil::getFileExt($src);
   //TEMPから/images/comment/&quot;.$saveNameへ保存
   $dst = sfConfig::get(&#39;sf_web_dir&#39;).&quot;/images/comments2/&quot;.$saveName;

   rename($src, $dst);
   $comment-&amp;gt;setPhoto2($saveName);
   $comment-&amp;gt;save();

  }


  return sfView::SUCCESS;
 }
&lt;/pre&gt;&lt;pre class=&quot;prettyprint&quot;&gt;index

&amp;lt;div class=&quot;line&quot;&amp;gt;
&amp;lt;?php echo form_tag(&quot;default/confirm&quot;,&quot;method=post multipart=true&quot;)?&amp;gt;
新規投稿&amp;lt;br&amp;gt;
&amp;lt;?php echo textarea_tag(&quot;coment&quot;, 
array(&quot;rows&quot; =&amp;gt; &quot;10&quot;, &quot;cols&quot; =&amp;gt; &quot;30&quot;)) ?&amp;gt;

&amp;lt;br&amp;gt;
ニックネーム&amp;lt;?php echo input_tag(&quot;name&quot;, array(&quot;size =&amp;gt; 20&quot;))?&amp;gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;
カテゴリ

&amp;lt;?php $categorie = sfConfig::get(&#39;sf_categorie&#39;)?&amp;gt;
&amp;lt;?php echo select_tag(&quot;$categorie&quot;, 
options_for_select($categorie,$value));?&amp;gt;&amp;lt;br&amp;gt;

画像1&amp;lt;?php echo input_file_tag(&quot;photo1&quot;) ?&amp;gt;&amp;lt;br&amp;gt;
画像2&amp;lt;?php echo input_file_tag(&quot;photo2&quot;) ?&amp;gt;&amp;lt;br&amp;gt;

&amp;lt;?php echo submit_tag(&quot;送信する&quot;) ?&amp;gt;&amp;lt;br&amp;gt;

&amp;lt;/form&amp;gt;

&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;comment&quot;&amp;gt;
 &amp;lt;?php foreach ($comments as $comment):?&amp;gt;
  &amp;lt;?php echo $comment-&amp;gt;getNickname();?&amp;gt;の投稿
  &amp;nbsp;&amp;nbsp;&amp;nbsp;投稿日時&amp;lt;?php echo $comment-&amp;gt;getCreatedat();?&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;カテゴリ:&amp;lt;?php echo $comment-&amp;gt;getCategorie();?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;

  &amp;lt;?php echo $comment-&amp;gt;getContent();?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php if($comment-&amp;gt;getPhoto()):?&amp;gt;
  &amp;lt;?php echo image_tag(&#39;/images/comment/&#39;
.$comment-&amp;gt;getPhoto(),&quot;class=imgmain&quot;) ?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php endif;?&amp;gt;
  &amp;lt;?php if($comment-&amp;gt;getPhoto2()):?&amp;gt;
  &amp;lt;?php echo image_tag(&#39;/images/comment/&#39;
.$comment-&amp;gt;getPhoto2(),&quot;class=imgmain&quot;) ?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php endif;?&amp;gt;
  &amp;lt;?php echo link_to(&quot;返信&quot;, &quot;/reply_add/input&quot;, 
array(&quot;query_string&quot; =&amp;gt; &quot;id=&quot;.$comment-&amp;gt;getId()))?&amp;gt;
 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;

&amp;lt;?php $replys = $comment-&amp;gt;getReplys();?&amp;gt;
  &amp;lt;?php foreach ($replys as $reply):?&amp;gt;
&amp;lt;div class=&quot;reply&quot;&amp;gt;

  &amp;lt;?php echo $reply-&amp;gt;getNickname();?&amp;gt;さんの投稿
&amp;nbsp;&amp;nbsp;&amp;nbsp;返信日時&amp;lt;?php echo $reply-&amp;gt;getCreatedat();?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php echo $reply-&amp;gt;getContent();?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php if($reply-&amp;gt;getPhoto()):?&amp;gt;
  &amp;lt;?php echo image_tag(&#39;/images/reply/&#39;.$reply-&amp;gt;getPhoto(),&quot;class=imgmain&quot;) ?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php endif;?&amp;gt;
&amp;lt;/div&amp;gt;
  &amp;lt;?php endforeach;?&amp;gt;
 &amp;lt;?php endforeach;?&amp;gt;

&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;pre class=&quot;prettyprint&quot;&gt;input
このコメントに返信します
&amp;lt;div&amp;gt;
 &amp;lt;?php echo $comment-&amp;gt;getContent();?&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php if($comment-&amp;gt;getPhoto()):?&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;img src=&quot;/images/comment/&amp;lt;?php echo $comment-&amp;gt;getPhoto();?&amp;gt;&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;?php endif;?&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;line&quot;&amp;gt;
&amp;lt;/div&amp;gt;
返信フォーム&amp;lt;br&amp;gt;

&amp;lt;?php echo form_tag(&quot;/reply_add/confirm&quot;, &quot;method=post multipart=true&quot;)?&amp;gt;
&amp;lt;?php echo textarea_tag(&quot;coment&quot;, array(&quot;rows&quot; =&amp;gt; &quot;10&quot;, &quot;cols&quot; =&amp;gt; &quot;30&quot;)) ?&amp;gt;&amp;lt;br&amp;gt;
ニックネーム&amp;lt;?php echo input_tag(&quot;name&quot;, array(&quot;size =&amp;gt; 20&quot;))?&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
画像1&amp;lt;?php echo input_file_tag(&quot;photo&quot;) ?&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;id&#39;, $comment-&amp;gt;getId()) ?&amp;gt;
&amp;lt;?php echo submit_tag(&quot;確認する&quot;) ?&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;pre class=&quot;prettyprint&quot;&gt;confirm
&amp;lt;?php echo form_tag(&quot;/reply_add/result&quot;, &quot;method=post multipart=true&quot;)?&amp;gt;
返信内容&amp;lt;br&amp;gt;
&amp;lt;?php echo $coment;?&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;coment&#39;, $coment) ?&amp;gt;
&amp;lt;br&amp;gt;
ニックネーム&amp;lt;br&amp;gt;
&amp;lt;?php echo $name;?&amp;gt;
&amp;lt;br&amp;gt;
画像&amp;lt;br&amp;gt;
&amp;lt;?php if($photo !=&quot;&quot;):?&amp;gt;
&amp;lt;img src=&quot;/uploads/tmp/&amp;lt;?php echo $photo?&amp;gt;&quot;&amp;gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div class=&quot;line&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;photo&#39;, $photo) ?&amp;gt;
&amp;lt;?php endif;?&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;name&#39;, $name) ?&amp;gt;
&amp;lt;?php echo input_hidden_tag(&#39;id&#39;, $id) ?&amp;gt;
&amp;lt;br&amp;gt;

&amp;lt;?php echo submit_tag(&quot;完了&quot;) ?&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/1913112670280189996/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/04/41.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/1913112670280189996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/1913112670280189996'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/04/41.html' title='4/1覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-287441925971867021</id><published>2011-03-31T18:17:00.001+09:00</published><updated>2011-04-04T12:59:54.484+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/31覚書</title><content type='html'>1時間目&lt;br /&gt;
&lt;br /&gt;
reply_add実装続き&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
&lt;br /&gt;
reply_add実装&lt;br /&gt;
&lt;br /&gt;
idを引き継ぐ処理以外は基本おなじなのだねー。&lt;br /&gt;
&lt;br /&gt;
ていうかそのreplyを表示させるのががが。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
画像アップロード&lt;br /&gt;
&lt;br /&gt;
[name] =&gt; notice01.jpg&lt;br /&gt;
[type] =&gt; image/jpeg&lt;br /&gt;
[tmp_name] =&gt; /tmp/phpyCW55n&lt;br /&gt;
[error] =&gt; 0&lt;br /&gt;
[size] =&gt; 83218&lt;br /&gt;
&lt;br /&gt;
ファイル送信時次のプログラムの処理が終わるまでの間、&lt;br /&gt;
サーバーのTEMPディレクトリに一時保管されている。&lt;br /&gt;
&lt;br /&gt;
sleep(20);を加えると20秒間処理を止めるので、&lt;br /&gt;
その間にPuTTYからrootで入ってcd /tmpで中身を見ると、&lt;br /&gt;
-rw-------  1 apache apache 83218  3月 25 16:25 phpJNeLpc&lt;br /&gt;
ってファイルがsleepで設定した時間分だけ確認できる。&lt;br /&gt;
処理が終われば消える。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
画像アップロード処理続き&lt;br /&gt;
TEMPディレクトリ作成とパーミッション変更&lt;br /&gt;
&lt;br /&gt;
cd web/uploads&lt;br /&gt;
mkdir tmp&lt;br /&gt;
chmod -R 777 tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
画像のアップロード&lt;br /&gt;
実際に表示させてみる&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
photoカラム追加&lt;br /&gt;
ALTER TABLE comment ADD photo text;&lt;br /&gt;
schema.yml、model作成&lt;br /&gt;
/web/images/commentディレクトリ作成&lt;br /&gt;
chmod 777 commentでパーミッション作成&lt;br /&gt;
&lt;br /&gt;
あと画像表示&lt;br /&gt;
できたらpreplyも。&lt;br /&gt;
replyカラム＋/web/images/replyカラムつけてね。&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
&lt;br /&gt;
あと画像表示&lt;br /&gt;
できたらpreplyも&lt;br /&gt;
作業続き&lt;br /&gt;
&lt;br /&gt;
めんどいからここでコード。&lt;br /&gt;
action.class.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;?php

class reply_addActions extends sfActions
{
  public function executeConfirm()
  {
   $this-&amp;gt;id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $this-&amp;gt;coment = $this-&amp;gt;getRequestParameter(&quot;coment&quot;);
 $photo = $this-&amp;gt;getRequest()-&amp;gt;getFile(&#39;photo&#39;);

   if($photo[&quot;tmp_name&quot;] != &#39;&#39;) {

  //保存する画像名はセッションID生成し付与
  session_regenerate_id();
  //myUtil::getFileExtで拡張子判別。帰り値は._gif._png._jpg
  $tmpname = &#39;photo_&#39; . session_id() .myUtil::getFileExt( $photo[&quot;tmp_name&quot;] );
  //web/uploads/tmpへ画像を移動する
  $this-&amp;gt;getRequest()-&amp;gt;moveFile(&#39;photo&#39;,sfConfig::get(&#39;sf_upload_dir&#39;).&#39;/tmp/&#39;.$tmpname);

  //templateにパスを渡している
  $this-&amp;gt;photo = $tmpname;
 }

 return sfView::SUCCESS;
  }

  public function executeInput()
  {
   //GETで渡されてくるコメントID
   $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
   $this-&amp;gt;comment = CommentPeer::retrieveByPK($id);
   $this-&amp;gt;photo = $this-&amp;gt;getRequestParameter(&quot;photo&quot;);


 return sfView::SUCCESS;
  }

  public function executeResult()
  {
 //idとnameとmailを変数にして渡す。
 $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
 $name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $coment = $this-&amp;gt;getRequestParameter(&quot;coment&quot;);

 //replyのupdate
 //インスタンス化。空のオブジェクトを生成。
 $reply = new Reply();
 //変数にした名前とメールを入力。
 $reply-&amp;gt;setCommentid(&quot;$id&quot;);
 $reply-&amp;gt;setNickname(&quot;$name&quot;);
 $reply-&amp;gt;setContent(&quot;$coment&quot;);
 //insert文発行
 $reply-&amp;gt;save();

 $photo = $this-&amp;gt;getRequestParameter(&#39;photo&#39;);

  //画像の存在判定
  if($photo != &#39;&#39;) {

   ///uploads/tmp/&#39;.$photoから画像を取得
   $src = sfConfig::get(&#39;sf_web_dir&#39;).&#39;/uploads/tmp/&#39;.$photo;
   //最新（投稿と同一）のidを取得（autoincrement稼動時）
   $saveName = $reply-&amp;gt;getId().myUtil::getFileExt($src);
   //TEMPから/images/comment/&quot;.$saveNameへ保存
   $dst = sfConfig::get(&#39;sf_web_dir&#39;).&quot;/images/reply/&quot;.$saveName;

   rename($src, $dst);
   $reply-&amp;gt;setPhoto($saveName);
   $reply-&amp;gt;save();

  }

   return sfView::SUCCESS;
  }
}
&lt;/pre&gt;&lt;br /&gt;
inputSuccess.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;このコメントに返信します
&amp;lt;div&amp;gt;
&amp;lt;?php echo $comment-&amp;gt;getContent();?&amp;gt;
  &amp;lt;?php if($comment-&amp;gt;getPhoto()):?&amp;gt;
  &amp;lt;img src=&quot;/images/comment/&amp;lt;?php echo $comment-&amp;gt;getPhoto();?&amp;gt;&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;?php endif;?&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;line&quot;&amp;gt;
&amp;lt;/div&amp;gt;
返信フォーム&amp;lt;br&amp;gt;

&amp;lt;form action=&quot;/reply_add/confirm&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;
&amp;lt;textarea name=&quot;coment&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;
ニックネーム&amp;lt;input type=&quot;text&quot; name=&quot;name&quot; size=&quot;20&quot;&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;file&quot; name=&quot;photo&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;&amp;lt;?php echo $comment-&amp;gt;getId();?&amp;gt;&quot;&amp;gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;確認する&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;confirmSuccess.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;form action=&quot;/reply_add/result&quot; method=&quot;post&quot;&amp;gt;
返信内容&amp;lt;br&amp;gt;
&amp;lt;?php echo $coment;?&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;coment&quot; value=&quot;&amp;lt;?php echo $coment;?&amp;gt;&quot;&amp;gt;
&amp;lt;br&amp;gt;
ニックネーム&amp;lt;br&amp;gt;
&amp;lt;?php echo $name;?&amp;gt;
&amp;lt;br&amp;gt;
画像&amp;lt;br&amp;gt;
&amp;lt;?php if($photo !=&quot;&quot;):?&amp;gt;
&amp;lt;img src=&quot;/uploads/tmp/&amp;lt;?php echo $photo?&amp;gt;&quot;&amp;gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div class=&quot;line&quot;&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;input type=&quot;hidden&quot; name=&quot;photo&quot; value=&quot;&amp;lt;?php echo $photo;?&amp;gt;&quot;&amp;gt;
&amp;lt;?php endif;?&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;name&quot; value=&quot;&amp;lt;?php echo $name;?&amp;gt;&quot;&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;&amp;lt;?php echo $id;?&amp;gt;&quot;&amp;gt;
&amp;lt;br&amp;gt;

&amp;lt;input type=&quot;submit&quot; value=&quot;確認する&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
resultSuccess.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;完了しました。
&amp;lt;a href=&quot;/&quot;&amp;gt;トップに戻る&amp;lt;/a&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
パーミッション解説&lt;br /&gt;
自分とグループと他人に対してのアクセス権限。&lt;br /&gt;
ファイルへの読み(read) 書き(write) 実行(execute)についての権限を与えること。&lt;br /&gt;
&lt;br /&gt;
できる人だけ。&lt;br /&gt;
アップロード3つぐらい送って見る。&lt;br /&gt;
複数の条件がどーしても思い浮かばない・・・&lt;br /&gt;
$photoをどこで複数化するんだああああ。&lt;br /&gt;
&lt;br /&gt;
おまけ&lt;br /&gt;
ntpやってなかったので設定。&lt;br /&gt;
教科書のサーバー構築の一番下にあるntp設定やればいいよ。&lt;br /&gt;
あとcreated_atの表示で詰まった。&lt;br /&gt;
_含むばあいは_取っていいみたい。&lt;br /&gt;
例】&lt;br /&gt;
投稿日時&lt;?php echo $comment-&gt;getCreatedat();?&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/287441925971867021/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/331.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/287441925971867021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/287441925971867021'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/331.html' title='3/31覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-881642814640910128</id><published>2011-03-29T16:52:00.000+09:00</published><updated>2011-03-29T16:52:57.685+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="掲示板2"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/29覚書</title><content type='html'>1時間目&lt;br /&gt;
DBstudyにcontactテーブルを追加&lt;br /&gt;
create table contact (&lt;br /&gt;
id int not null auto_increment,&lt;br /&gt;
name text,&lt;br /&gt;
cotent text,&lt;br /&gt;
created_at datetime,&lt;br /&gt;
primary key(id)&lt;br /&gt;
);&lt;br /&gt;
※primary key(id)が最初抜けててエラーググって判明；&lt;br /&gt;
あぶねー。&lt;br /&gt;
&lt;br /&gt;
schema作成&lt;br /&gt;
symfony propel-build-schema&lt;br /&gt;
model作成&lt;br /&gt;
symfony propel-build-model&lt;br /&gt;
&lt;br /&gt;
lib/modelに&lt;br /&gt;
contact.phpとcontactPeer.phpができているか確認。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
&lt;br /&gt;
insert復習&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;actions.class.php
  //insertのcontact。
  //インスタンス化。空のオブジェクトを生成。
  $contact = new Contact();
  //名前と内容を入力。
  $contact-&amp;gt;setName(&#39;ゆっきー&#39;);
  $contact-&amp;gt;setCotent(&#39;今日はなんとなくやれるかな&#39;);
  //insert文発行
  $contact-&amp;gt;save();
indexSuccess.php
&amp;lt;div class=&quot;tblData&quot;&amp;gt;

&amp;lt;table&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;名前&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;内容&amp;lt;/th&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;?php foreach ($contacts as $contact):?&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;?php echo $contact-&amp;gt;getName();?&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;?php echo $contact-&amp;gt;getCotent();?&amp;gt;&amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;?php endforeach;?&amp;gt;
&amp;lt;/table&amp;gt;

&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
updateは省略。&lt;br /&gt;
1行削除も省略。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  //全行削除
  $c = new Critreria;
  $contacts = ContentPeer::doselect($c);
  foreach($contacts as $contact){
   $contact-&amp;gt;delete();
  }
&lt;/pre&gt;&lt;br /&gt;
☆練習問題&lt;br /&gt;
contact_addモジュール作成してinsert、confirm、result作成。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
☆練習問題&lt;br /&gt;
contact_addに下記追加。&lt;br /&gt;
性別　男性　女性　ラジオボタン&lt;br /&gt;
都道府県　prefで&lt;br /&gt;
興味のあること　チェックボックス&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
もっかいbbs2バックアップしてつくり直し。&lt;br /&gt;
んで掲示板reply_addつける。&lt;br /&gt;
indexで新規投稿と投稿一覧、各投稿に返信リンク、&lt;br /&gt;
新規投稿→confirmで確認→resultで完了&lt;br /&gt;
返信リンクid渡し→入力画面id渡し→confirmで確認id渡し→resultで完了&lt;br /&gt;
&lt;br /&gt;
create table reply (&lt;br /&gt;
id int not null auto_increment,&lt;br /&gt;
comment_id int,&lt;br /&gt;
nickname text,&lt;br /&gt;
content text,&lt;br /&gt;
created_at datetime,&lt;br /&gt;
primary key(id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
symfony init-module front reply_add&lt;br /&gt;
symfony propel-build-schema&lt;br /&gt;
symfony propel-build-model&lt;br /&gt;
symfony cc&lt;br /&gt;
忘れないようにねー&lt;br /&gt;
&lt;br /&gt;
シンボリックリンク&lt;br /&gt;
webでln -s /usr/share/pear/data/symfony/web/sf ./sf&lt;br /&gt;
&lt;br /&gt;
ラストまで。&lt;br /&gt;
&lt;br /&gt;
返信の表示処理は明日。&lt;br /&gt;
不完全なのでコードは明日。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/881642814640910128/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/329.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/881642814640910128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/881642814640910128'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/329.html' title='3/29覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-5268321372484025327</id><published>2011-03-28T18:06:00.003+09:00</published><updated>2011-03-28T18:37:48.437+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CRUD"/><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/28覚書</title><content type='html'>1時間目&lt;br /&gt;
&lt;br /&gt;
☆modelによるCRUD（クラッド）&lt;br /&gt;
以下の4つの機能を使う。&lt;br /&gt;
◆Create&lt;br /&gt;
◆Update&lt;br /&gt;
◆Delete&lt;br /&gt;
◆Read←昨日からやってるデータの呼び出し&lt;br /&gt;
&lt;br /&gt;
◆Create&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;action側
  //insertのcomment。
  //インスタンス化。空のオブジェクトを生成。
  $comment = new Comment();
  //名前と内容を入力。
  $comment-&amp;gt;setNickname(&#39;satou&#39;);
  $comment-&amp;gt;setContent(&#39;今日はいい天気&#39;);
  //insert文発行
  $comment-&amp;gt;save();

  //insertのmember
  //インスタンス化。空のオブジェクトを生成。
  //$member = new Member();
  //名前とメールを入力。idカラムは自動なので不要。
　//カラムにcreated_at、update_atがあればSymfonyが自動で一緒にやってくれる。
  //$member-&amp;gt;setNickname(&quot;ooyama&quot;);
  //$member-&amp;gt;setMailaddress(&quot;ooyama@sample.com&quot;);
  //insert文発行
  //$member-&amp;gt;save();

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

View側commentテーブル

&amp;lt;div class=&quot;tblData&quot;&amp;gt;
&amp;lt;table&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;名前&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;内容&amp;lt;/th&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;?php foreach ($comments as $comment):?&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;?php echo $comment-&amp;gt;getNickname();?&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;?php echo $comment-&amp;gt;getContent();?&amp;gt;&amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;?php endforeach;?&amp;gt;
&amp;lt;/table&amp;gt;

&amp;lt;/div&amp;gt;

  //$comment＋sで複数にする。commentテーブルのすべてのデータを引き出す。
  $this-&amp;gt;comments = CommentPeer::doSelect($c);
&lt;/pre&gt;&lt;br /&gt;
2時間目&lt;br /&gt;
◆Update&lt;br /&gt;
Createとの差異は空のオブジェクト生成をしないことだけ。&lt;br /&gt;
$member = MemberPeer::retriveByPK();を使う点のみ。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//Update
  $member = MemberPeer::retrieveByPK(5);
  //名前とメールを入力。
  $member-&amp;gt;setNickname(&quot;ooyama&quot;);
  $member-&amp;gt;setMailaddress(&quot;ooyama@sample.com&quot;);
  //insert文発行
  $member-&amp;gt;save();
&lt;/pre&gt;&lt;br /&gt;
◆Delete&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//Delete
  $member = MemberPeer::retrieveByPk(7);
  //memberがあれば削除。こうしないとエラーになる。
  if($member){
   $member-&amp;gt;delete();
  }
&lt;/pre&gt;&lt;br /&gt;
☆練習問題&lt;br /&gt;
1．bbs2でmember_addモジュール作成&lt;br /&gt;
2．input、confirm、resultのaction作成&lt;br /&gt;
3．resultでinsert処理&lt;br /&gt;
&lt;br /&gt;
1～2は&lt;a href=&quot;http://sari1225.blogspot.com/2011/03/323.html&quot;&gt;3/23覚書&lt;/a&gt;を参考に～。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
☆練習問題答え合わせ&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeConfirm()
  {
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $this-&amp;gt;mail = $this-&amp;gt;getRequestParameter(&quot;mail&quot;);
   return sfView::SUCCESS;
  }
  public function executeInput()
  {
   return sfView::SUCCESS;
  }
  public function executeResult()
  {
   //insertのmember
 //インスタンス化。空のオブジェクトを生成。
 $member = new Member();
 
 //nameとmailを変数にして渡す。
 $name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $mail = $this-&amp;gt;getRequestParameter(&quot;mail&quot;);

 //insertのmember
 //インスタンス化。空のオブジェクトを生成。
 $member = new Member();
 //変数にした名前とメールを入力。
 $member-&amp;gt;setNickname(&quot;$name&quot;);
 $member-&amp;gt;setMailaddress(&quot;$mail&quot;);
 //insert文発行
 $member-&amp;gt;save();

   return sfView::SUCCESS;
  }
&lt;/pre&gt;&lt;br /&gt;
4時間目&lt;br /&gt;
1.bbs2でmember_list、member_editモジュール作成。&lt;br /&gt;
2.モジュール作成。一覧表に編集ページリンクつけて、idを渡す。&lt;br /&gt;
3.余裕のある人はdeleteで削除処理&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
&lt;br /&gt;
作成続き&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
ううむidのReadがどうしても理解できなかった･･････。member_addはさくっとできたのに(つД`)&lt;br /&gt;
自力でできなかった人は/bbs2/apps/front/modules/に移動してから、&lt;br /&gt;
mv member_list bk.member_list&lt;br /&gt;
mv member_edit bk.member_edit&lt;br /&gt;
でバックアップとっても一回やろう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;public function executeConfirm()
  {
   //IDを受け取る
 $this-&amp;gt;id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
 //名前、メールアドレスを受け取る
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $this-&amp;gt;mail = $this-&amp;gt;getRequestParameter(&quot;mail&quot;);


 return sfView::SUCCESS;
  }
  public function executeInput()
  {

   //IDを受け取る
 $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
 $this-&amp;gt;member = MemberPeer::retrieveByPK($id);
 //名前、メールアドレスを受け取る(オブジェクトごと受け取るときは無しでよい)
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $this-&amp;gt;mail = $this-&amp;gt;getRequestParameter(&quot;mail&quot;);

 return sfView::SUCCESS;
  }
  public function executeResult()
  {
   //update-member
 //nameとmailを変数にして渡す。
 $name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $mail = $this-&amp;gt;getRequestParameter(&quot;mail&quot;);

 //IDを指定。
 $id = $this-&amp;gt;getRequestParameter(&quot;id&quot;);
 $member = MemberPeer::retrieveByPK(&quot;$id&quot;);

 //変数にした名前とメールを入力。ここでIDは要らないよ。
 $member-&amp;gt;setNickname(&quot;$name&quot;);
 $member-&amp;gt;setMailaddress(&quot;$mail&quot;);
 //Update実行
 $member-&amp;gt;save();

 return sfView::SUCCESS;
  }
&lt;/pre&gt;insertSucces.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;form action=&quot;/member_edit/confirm/&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot;name=&quot;name&quot; value=&quot;&amp;lt;?php echo $member-&amp;gt;getNickname();?&amp;gt;&quot;&amp;gt;&amp;lt;br&amp;gt;
メールアドレス:&amp;lt;input type=&quot;text&quot;name=&quot;mail&quot; size=&quot;30&quot;
 value=&quot;&amp;lt;?php echo $member-&amp;gt;getMailaddress();?&amp;gt;&quot;&amp;gt;

&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;確認&quot;&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;&amp;lt;?php echo $member-&amp;gt;getId();?&amp;gt;&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;comfirmSucces.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;form action=&quot;/member_edit/result/&quot; method=&quot;POST&quot;&amp;gt;
名前:
&amp;lt;?php echo $name;?&amp;gt;
です。
&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;name&quot; value=&quot;&amp;lt;?php echo $name;?&amp;gt;&quot;&amp;gt;
メールアドレス:
&amp;lt;?php echo $mail;?&amp;gt;
です。
&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;mail&quot; value=&quot;&amp;lt;?php echo $mail;?&amp;gt;&quot;&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;&amp;lt;?php echo $id;?&amp;gt;&quot;&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;更新する&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;resultSucces.php&lt;br /&gt;
完了しました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
おまけ&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;commentの検索
View側
&amp;lt;form action=&quot;/&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot; name=&quot;keyword2&quot;&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;送信&quot;&amp;gt;&amp;lt;/form&amp;gt;

action側
  //シンプルなlike検索機能bycomment
  $d = new Criteria();
  $keyword2 = $this-&amp;gt;getRequestParameter(&quot;keyword2&quot;);
  if($keyword2 !=&quot;&quot;){
  $d-&amp;gt;add(CommentPeer::NICKNAME, &quot;%&quot;.$keyword2.&quot;%&quot;, Criteria::LIKE);
  }
  //$comment＋sで複数にする。commentテーブルのすべてのデータを引き出す。
  $this-&amp;gt;comments = CommentPeer::doSelect($d);
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/5268321372484025327/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/328.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/5268321372484025327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/5268321372484025327'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/328.html' title='3/28覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-7671521009831707201</id><published>2011-03-25T17:51:00.002+09:00</published><updated>2011-03-27T21:20:44.421+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/25覚書</title><content type='html'>1時間目は遅刻&lt;br /&gt;
&lt;br /&gt;
やること&lt;br /&gt;
昨日の復習&lt;br /&gt;
1.bbs2をbk.bbs2にリネームしてバックアップ&lt;br /&gt;
mv bbs2 bk.bbs2&lt;br /&gt;
2.front backend mypage&lt;br /&gt;
各アプリケーション作成およびdefaultモジュール作成。&lt;br /&gt;
3.backendとmypageで/区切りのURLでアクセス&lt;br /&gt;
4.frontアプリケーションのレイアウトを変更。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
&lt;br /&gt;
1時間目続き。&lt;br /&gt;
30分から復習&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
mypageは出るがbackendが出ない。はて。&lt;br /&gt;
/bbs2/web/backend/backend.phpの&lt;br /&gt;
../../にiが入ってた＿|￣|○&lt;br /&gt;
直った。&lt;br /&gt;
&lt;br /&gt;
ちなみにでらっちが/web/main.cssと/apps/front/templates/layout.phpの&lt;br /&gt;
中身メールでくれてるよ。昨日とおとといのおいらの記事にもあるけど。&lt;br /&gt;
でらっちのみてね～。&lt;br /&gt;
&lt;br /&gt;
member_addはいいのかなあ･･････。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
retrieveByPK(1);のKは基本&lt;br /&gt;
&lt;br /&gt;
困ったときのデバッグとシンボリックリンク&lt;br /&gt;
http://www.shonanbbs.com/front_dev.php&lt;br /&gt;
画面が真っ白のときはここを見ればエラーが書いてある。&lt;br /&gt;
&lt;br /&gt;
で、デバッグバーの画像がまだ引っ張れてないので関連付け&lt;br /&gt;
bbs2/webで下記実行&lt;br /&gt;
ln -s /usr/share/pear/data/symfony/web/sf ./sf&lt;br /&gt;
&lt;br /&gt;
sf -&gt; /usr/share/pear/data/symfony/web/sf&lt;br /&gt;
が出ていればデバッグページでF5で出てくるよ。&lt;br /&gt;
&lt;br /&gt;
backendやmypageなどのほかのページには、各ディレクトリへ移動してから&lt;br /&gt;
各_dev.phpの../を2個にしておくよ。&lt;br /&gt;
&lt;br /&gt;
ln -s ../sf sf&lt;br /&gt;
上の階層（web）からsfを引っ張ってくるよ。&lt;br /&gt;
&lt;br /&gt;
CSSも同じスタイルでよければ&lt;br /&gt;
ln -s ../CSS CSS&lt;br /&gt;
でつくよ。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;セキュリティ上非常に危険なため、リリース前には必ず_dev.phpは削除する。&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
Criteria(クライテリア)による条件指定&lt;br /&gt;
WHEREの代わりに使う。&lt;br /&gt;
&lt;br /&gt;
$c = new Criteria();&lt;br /&gt;
&lt;br /&gt;
$c-&gt;add(テーブル名Peer::カラム大文字, 指定する値, 条件)&lt;br /&gt;
条件を書かない場合はカラム＝値と等しい場合となる。&lt;br /&gt;
SQL文だとこうなるけど&lt;br /&gt;
select * from member whwre id =1;&lt;br /&gt;
Symfonyではこうなる&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//最初に必ずセット　select * from member;と同じ。
  $c = new Criteria();

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

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

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

  print_r ($members);
&lt;/pre&gt;&lt;br /&gt;
ソース出すとこうなる。データは配列で受け取る。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Member Object
(
    [id:protected] =&amp;gt; 1
    [nickname:protected] =&amp;gt; yamazaki
    [mailaddress:protected] =&amp;gt; ****@gmail.com
    [password:protected] =&amp;gt; 
    [created_at:protected] =&amp;gt; 
    [alreadyInSave:protected] =&amp;gt; 
    [alreadyInValidation:protected] =&amp;gt; 
    [validationFailures:protected] =&amp;gt; Array
        (
        )

    [_new:private] =&amp;gt; 
    [_deleted:private] =&amp;gt; 
    [modifiedColumns:protected] =&amp;gt; Array
        (
        )

)
&lt;/pre&gt;&lt;br /&gt;
☆DBから名前のデータを引き出す。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;action.class.php
  //最初に必ずセット　select * from member;と同じ。
  $c = new Criteria();

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

indexSuccess.php
｛を使うとわかりにくいので、&lt;b&gt;:&lt;/b&gt;と&lt;b&gt;&amp;lt;?php endforeach;?&amp;gt;&lt;/b&gt;で囲う。

&amp;lt;?php foreach ($members as $member)&lt;b&gt;:&lt;/b&gt;?&amp;gt;
&amp;lt;?php echo $member-&amp;gt;getNickname();?&amp;gt;&amp;lt;br&amp;gt;
&lt;b&gt;&amp;lt;?php endforeach;?&amp;gt;&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;
☆練習問題&lt;br /&gt;
名前とメールアドレスをテーブルに出力＋CSSで整形&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;indexSuccessのソース

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

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;
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
☆Criteria(クライテリア)による条件指定&lt;br /&gt;
&lt;br /&gt;
条件&lt;br /&gt;
Criteria::EQUAL&lt;br /&gt;
Criteria::NOT_EQUAL&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//最初に必ずセット　select * from member;と同じ。
  $c = new Criteria();

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

  //IDがyamazakiのデータ select * from member where nickname ;
  //$c-&amp;gt;add(MemberPeer::NICKNAME, &#39;yamazaki&#39;, Criteria::NOT_EQUAL);

  //like指定
  //$c-&amp;gt;add(MemberPeer::NICKNAME, &quot;%yama%&quot;, Criteria::LIKE);

  //日付指定検索
  //$c-&amp;gt;add(MemberPeer::CREATED_AT, &quot;2011-03-01&quot;, Criteria::GREATER_THAN);

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

  //$member＋sで複数にする。テーブルのすべてのデータを引き出す。
  $this-&amp;gt;members = MemberPeer::doSelect($c);
&lt;/pre&gt;&lt;br /&gt;
忘れてたUPDATE&lt;br /&gt;
日付修正ID指定込み&lt;br /&gt;
update member set created_at =&#39;2011-03-25&#39; where id =2;&lt;br /&gt;
名前文字化け修正ID指定込み&lt;br /&gt;
update member set nickname =(&#39;名前&#39;) WHERE id =2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
☆練習問題　テーブルの上に検索欄追加。余裕のある人はcommentも呼び出して。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;indexSuccess側
&amp;lt;form action=&quot;/&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot; name=&quot;keyword&quot;&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;送信&quot;&amp;gt;&amp;lt;/form&amp;gt;

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

  //$member＋sで複数にする。テーブルのすべてのデータを引き出す。
  $this-&amp;gt;members = MemberPeer::doSelect($c);
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
commentに何も入れてなかった。サンプルに残そー。&lt;br /&gt;
&lt;br /&gt;
insert into comment (nickname,content,created_at) values (&#39;山崎&#39;,&#39;腰が痛い&#39;,&#39;2011-03-25&#39;);&lt;br /&gt;
insert into comment (nickname,content,created_at) values (&#39;みっくみく&#39;,&#39;ボカロボカロ&#39;,&#39;2011-03-25&#39;);&lt;br /&gt;
insert into comment (nickname,content,created_at) values (&#39;サンレッド&#39;,&#39;コードナンバー046&#39;,&#39;2011-03-25&#39;);&lt;br /&gt;
insert into comment (nickname,content,created_at) values (&#39;ウサコッツ&#39;,&#39;アニマル怪人&#39;,&#39;2011-03-25&#39;);</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/7671521009831707201/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/325.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7671521009831707201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7671521009831707201'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/325.html' title='3/25覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-4478868301808054863</id><published>2011-03-24T18:06:00.007+09:00</published><updated>2011-03-27T21:23:55.932+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/24覚書</title><content type='html'>1時間目&lt;br /&gt;
腰痛＆腹痛のため掃除はお休み。&lt;br /&gt;
・EclipceでShift＋Ctrl＋Fキーで勝手に整形してくれる。超便利。&lt;br /&gt;
（でも今までの感覚からするとちょっと見づらいかな；）&lt;br /&gt;
・☆練習問題解説編&lt;br /&gt;
user_addモジュールにinput、confirm、resultのactionを入れよう。&lt;br /&gt;
ページの内容は名前を入力→確認→完了の流れで作ろう。&lt;br /&gt;
できたらMENUの下に会員登録ってリンクつけてね。&lt;br /&gt;
&lt;br /&gt;
ファイル自体が壊れたりエラーが多い時はPuTTYで&lt;a href=&quot;http://www.k-tanaka.net/unix/rm.html&quot;&gt;削除かディレクトリごと&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
&lt;br /&gt;
・☆練習問題解説編続き&lt;br /&gt;
・メールアドレスの処理を追加&lt;br /&gt;
・bbs2にbackendアプリ追加&lt;br /&gt;
symfony init-app backend&lt;br /&gt;
&lt;br /&gt;
frontは記事表示を担当。backendで管理機能を担当。&lt;br /&gt;
frontコントローラーのリクエストを受けるのはindex.php。&lt;br /&gt;
frontアプリケーションのfrontコントローラーはindex.php。&lt;br /&gt;
&lt;br /&gt;
backendコントローラーのリクエストを受けるのはbackend.php。&lt;br /&gt;
backendアプリケーションのbackendコントローラーはbackend.php。&lt;br /&gt;
&lt;br /&gt;
backendにdefaultmodule追加&lt;br /&gt;
bbs2で以下実行&lt;br /&gt;
symfony init-module backend default&lt;br /&gt;
&lt;br /&gt;
2番目以降のURLは省略不可。&lt;br /&gt;
ブラウザでアクセスするときは&lt;br /&gt;
http://www.shonanbbs.com/backend.php/default/index&lt;br /&gt;
SEO的にまずいので/で簡略化だけど3時間目で。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
&lt;br /&gt;
アプリ―コントローラーの関係&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQiyXbmTEjFnT-PYnNfvrLd0oCB-_74fzYhhuSOMY3jnzON4T4JdtjIG7QuLQw_uTGuve-b3IMIq0BeZEvVXHOeEK4eYbGUohyphenhyphenw3GUDRtp6HXs3Pc9YyaM93tyh7_40lkHIoFlnPQ7W-yF/s1600/app-module01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;357&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQiyXbmTEjFnT-PYnNfvrLd0oCB-_74fzYhhuSOMY3jnzON4T4JdtjIG7QuLQw_uTGuve-b3IMIq0BeZEvVXHOeEK4eYbGUohyphenhyphenw3GUDRtp6HXs3Pc9YyaM93tyh7_40lkHIoFlnPQ7W-yF/s512/app-module01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
見栄えの問題やSEO上の考慮から&lt;br /&gt;
http://www.shonanbbs.com/backend/default&lt;br /&gt;
でアクセスできるように設定する。&lt;br /&gt;
&lt;br /&gt;
1.cd /home/teacher/bbs2/web&lt;br /&gt;
に移動&lt;br /&gt;
&lt;br /&gt;
2.backendディレクトリを作成&lt;br /&gt;
mkdir backend&lt;br /&gt;
&lt;br /&gt;
3.backend.php backend_dev.phpをbackendディレクトリへ移動&lt;br /&gt;
mv backend.php backend_dev.php ./backend&lt;br /&gt;
&lt;br /&gt;
4.htaccessディレクトリをbackendディレクトリへコピー&lt;br /&gt;
cp .htaccess ./backend&lt;br /&gt;
&lt;br /&gt;
5.backendディレクトリへ移動&lt;br /&gt;
cd backend&lt;br /&gt;
&lt;br /&gt;
6..htaccessの内容を変更する&lt;br /&gt;
vi .htaccess&lt;br /&gt;
RewriteBaseとRewriteRuleを以下のように変更&lt;br /&gt;
&lt;br /&gt;
8行目&lt;br /&gt;
#RewriteBase /の#をとる&lt;br /&gt;
22行目&lt;br /&gt;
RewriteRule ^(.*)$ /backend/backend.php [QSA,L]&lt;br /&gt;
に変更する。&lt;br /&gt;
&lt;br /&gt;
7.backend.phpを開いて下記に変更&lt;br /&gt;
3行目&lt;br /&gt;
define(&#39;SF_ROOT_DIR&#39;,    realpath(dirname(__FILE__).&#39;/../..&#39;));&lt;br /&gt;
/..を1階層増やすだけ。&lt;br /&gt;
&lt;br /&gt;
8.http://www.shonanbbs.com/backend/defaultでアクセスできることを確認。&lt;br /&gt;
&lt;br /&gt;
☆練習問題&lt;br /&gt;
mypageアプリを新規追加してbackendと同じようになってみよう。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
☆練習問題&lt;br /&gt;
mypageアプリを新規追加してbackendと同じようになってみよう。&lt;br /&gt;
&lt;br /&gt;
の答え合わせ。&lt;br /&gt;
&lt;br /&gt;
☆YAML&lt;br /&gt;
ヘッダー情報はYAML、ymlファイルで管理。&lt;br /&gt;
/bbs2/apps/front/config/view.yml&lt;br /&gt;
&lt;br /&gt;
metas:&lt;br /&gt;
title:        SHONANBBS&lt;br /&gt;
に変更し、&lt;br /&gt;
symfony cc（CCはキャッシュクリア）&lt;br /&gt;
ymlを変更したら必ずsymfony ccを行い、F5でページ更新。&lt;br /&gt;
&lt;br /&gt;
ここの詳しい話は後日。&lt;br /&gt;
5時間目&lt;br /&gt;
metasの内容を以下に変更。&lt;br /&gt;
&lt;br /&gt;
description:  課題掲示板です。&lt;br /&gt;
keywords:     WEBエンジニア養成科,php,Symfony&lt;br /&gt;
language:     ja&lt;br /&gt;
&lt;br /&gt;
変更したらsymfony ccを行い、F5でページ更新。&lt;br /&gt;
&lt;br /&gt;
■出ないとき&lt;br /&gt;
キャッシュをクリアする権限をユーザーでなくrootですると、Symfony ccが正常終了しない。&lt;br /&gt;
bbs2で&lt;br /&gt;
chown -R ユーザー:ユーザー /cache&lt;br /&gt;
でキャッシュの権限をユーザーに変更しなおすか、&lt;br /&gt;
&lt;br /&gt;
chown -R755 ユーザー:ユーザー /cache&lt;br /&gt;
＋パーミッション変更やてみる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
個別に書きたいときは各metasの項目を削除しlayout.phpで直書きか後日行う部品化を使う。&lt;br /&gt;
&lt;br /&gt;
CSSも  stylesheets:    [main]&lt;br /&gt;
標準のCSS正規パス /home/yamazaki/bbs2/web/css/main.cssに存在する。&lt;br /&gt;
書き足したいときはカンマ＋スペースで区切る&lt;br /&gt;
stylesheets:    [main, mypage, ・・・]&lt;br /&gt;
&lt;br /&gt;
javascripts:    []もある。今はいじらないけど。&lt;br /&gt;
&lt;br /&gt;
has_layout:     on&lt;br /&gt;
&lt;br /&gt;
actionの出力結果をレイアウトしなくていいときはoffにできるよ。&lt;br /&gt;
&lt;br /&gt;
layout:         layout&lt;br /&gt;
layout.phpを使うという意味。名称変更可能。&lt;br /&gt;
&lt;br /&gt;
☆データベース&lt;br /&gt;
SQL を使用せずにデータベースを操作する、O/Rマッピングを使う。&lt;br /&gt;
&lt;br /&gt;
O/R マッピングとは、「オブジェクト」と「リレーショナルデータベース」を&lt;br /&gt;
マッピング（対応付け）することです。&lt;br /&gt;
O/R マッピングは実装時のデータベース操作にかかわる煩雑な作業を軽減してくれます。&lt;br /&gt;
&lt;br /&gt;
SQLのデータの記述はルールが無いため複雑になりやすい。&lt;br /&gt;
&lt;br /&gt;
O/Rマッピングはルールが決まっているので作業効率が上がる。&lt;br /&gt;
&lt;br /&gt;
とりあえずrootでmysqlログインするよー&lt;br /&gt;
&lt;br /&gt;
ログインしたらcreate database study;でDB作成。&lt;br /&gt;
show database;でstudyの存在を確認したら&lt;br /&gt;
&lt;br /&gt;
GRANT ALL ON study.* TO ユーザー名@&quot;localhost&quot; IDENTIFIED BY &quot;パスワード&quot;;&lt;br /&gt;
flush privileges;&lt;br /&gt;
&lt;br /&gt;
ホスト名は同じサーバーならlocalhost、外部からならIPアドレス。&lt;br /&gt;
&lt;br /&gt;
しかし･･････なぜかflush privileges;ができない&lt;br /&gt;
ERROR 1146 (42S02): Table &#39;mysql.servers&#39; doesn&#39;t exist&lt;br /&gt;
になってしまう。&lt;br /&gt;
&lt;br /&gt;
回避策&lt;br /&gt;
use mysql;&lt;br /&gt;
&lt;br /&gt;
を実行し下記コピペ。&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `servers` (&lt;br /&gt;
`Server_name` char(64) NOT NULL,&lt;br /&gt;
`Host` char(64) NOT NULL,&lt;br /&gt;
`Db` char(64) NOT NULL,&lt;br /&gt;
`Username` char(64) NOT NULL,&lt;br /&gt;
`Password` char(64) NOT NULL,&lt;br /&gt;
`Port` int(4) DEFAULT NULL,&lt;br /&gt;
`Socket` char(64) DEFAULT NULL,&lt;br /&gt;
`Wrapper` char(64) NOT NULL,&lt;br /&gt;
`Owner` char(64) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`Server_name`)&lt;br /&gt;
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=&#39;MySQL Foreign Servers table&#39;;&lt;br /&gt;
&lt;br /&gt;
も一回flush privileges;でようやく完了。&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
comment、member、テーブル作成。&lt;br /&gt;
&lt;br /&gt;
create table comment (&lt;br /&gt;
id int not null auto_increment,&lt;br /&gt;
nickname text,&lt;br /&gt;
content text,&lt;br /&gt;
created_at datetime,&lt;br /&gt;
primary key(id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table member (&lt;br /&gt;
id int not null auto_increment,&lt;br /&gt;
nickname text,&lt;br /&gt;
mailaddress text,&lt;br /&gt;
password text,&lt;br /&gt;
created_at datetime,&lt;br /&gt;
primary key(id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
☆Symfonyでのデータベース接続&lt;br /&gt;
/bbs2/config/databases.yml&lt;br /&gt;
#をすべて取る。&lt;br /&gt;
&lt;br /&gt;
mysql://root@localhost/dbnameを変更&lt;br /&gt;
mysql://ユーザー名:パスワード@localhost/study&lt;br /&gt;
エンコード設定とプログラムの記述注意点&lt;br /&gt;
YAMLは先頭部分の記述は半角スペース2個をひとつと判断している。&lt;br /&gt;
この部分の構成は崩さないように。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;all:
  propel:
    class:          sfPropelDatabase
    param:
      dsn:          mysql://ユーザー名:パスワード@localhost/study
      encoding: utf8
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
/bbs2/config/propel.iniの以下を変更&lt;br /&gt;
&lt;br /&gt;
propel.database.createUrl  = mysql://root@localhost/&lt;br /&gt;
propel.database.url        = mysql://root@localhost/bbs2&lt;br /&gt;
&lt;br /&gt;
を&lt;br /&gt;
propel.database.createUrl  = mysql://ユーザー名:パスワード@localhost&lt;br /&gt;
propel.database.url        = mysql://ユーザー名:パスワード@localhost/study&lt;br /&gt;
&lt;br /&gt;
☆schema.ymlを作成する（DB作成後のみ処理可能）&lt;br /&gt;
モデルを作成するための設計書にあたるschema.ymlを作成する。&lt;br /&gt;
DBを見に行って接続情報・テーブル情報を引き出し、データファイルを作るための設計書を作成。&lt;br /&gt;
&lt;br /&gt;
一般ユーザーでbbs2から実行。&lt;br /&gt;
symfony propel-build-schema&lt;br /&gt;
&lt;br /&gt;
vi /bbs2/config/schema.yml&lt;br /&gt;
で中身にcommentテーブルなどが出ている。&lt;br /&gt;
&lt;br /&gt;
次にモデルファイルを作成。&lt;br /&gt;
bbs2で実行&lt;br /&gt;
symfony propel-build-model&lt;br /&gt;
&lt;br /&gt;
cd lib/modelの中身にcommentPeer.phpとmemberPeer.phpができていればおｋ。&lt;br /&gt;
&lt;br /&gt;
？？　テーブル構造に変化があったらschemaとmodel再生成。&lt;br /&gt;
独自追加したい場合はschema.ymlとDB両方とも手書き修正。&lt;br /&gt;
自動生成させるとせっかく変えた設定が上書きされてしまう。&lt;br /&gt;
&lt;br /&gt;
7時間目&lt;br /&gt;
&lt;br /&gt;
データ入れます。&lt;br /&gt;
set names sjis;&lt;br /&gt;
忘れないでねー。&lt;br /&gt;
&lt;br /&gt;
INSERT INTO member (nickname, mailaddress) VALUES&lt;br /&gt;
(&#39;yamazaki&#39;, &#39;s****@gmail.com&#39;);&lt;br /&gt;
INSERT INTO member (nickname, mailaddress) VALUES&lt;br /&gt;
(&quot;みっくみく&quot;, &quot;mmd@gmail.com&quot;);&lt;br /&gt;
INSERT INTO member (nickname, mailaddress) VALUES&lt;br /&gt;
(&quot;サンレッド&quot;, &quot;sunred@gmail.com&quot;);&lt;br /&gt;
INSERT INTO member (nickname, mailaddress) VALUES&lt;br /&gt;
(&quot;ウサコッツ&quot;, &quot;usako@gmail.com&quot;);&lt;br /&gt;
&lt;br /&gt;
停電なんでここまで。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/4478868301808054863/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/324.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/4478868301808054863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/4478868301808054863'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/324.html' title='3/24覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQiyXbmTEjFnT-PYnNfvrLd0oCB-_74fzYhhuSOMY3jnzON4T4JdtjIG7QuLQw_uTGuve-b3IMIq0BeZEvVXHOeEK4eYbGUohyphenhyphenw3GUDRtp6HXs3Pc9YyaM93tyh7_40lkHIoFlnPQ7W-yF/s72-c/app-module01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-2118202418530660785</id><published>2011-03-23T22:24:00.000+09:00</published><updated>2011-03-23T22:24:28.346+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="講座、Symfony、VirtualHost"/><title type='text'>3/23覚書</title><content type='html'>腰痛のため4時間目後半から参加。&lt;br /&gt;
詳しくは&lt;a href=&quot;http://ooyama3.blogspot.com/&quot;&gt;講習の記録&lt;/a&gt;をご参照くだされ。&lt;br /&gt;
&lt;br /&gt;
☆準備でちゃんと聞けなかったところ&lt;br /&gt;
actions.class.phpの&lt;br /&gt;
public function execute&lt;b&gt;Index&lt;/b&gt;()&lt;br /&gt;
と&lt;b&gt;index&lt;/b&gt;Success.php&lt;br /&gt;
太字の箇所は同じ名前にする。&lt;br /&gt;
&lt;br /&gt;
ちょっと言い換えてみる。&lt;br /&gt;
actions.class.phpで&lt;br /&gt;
public function execute&lt;b&gt;動的処理&lt;/b&gt;()&lt;br /&gt;
&lt;b&gt;出力処理&lt;/b&gt;Success.php&lt;br /&gt;
&lt;b&gt;この関係は同じ変数で管理するというイメージがいいのかな。&lt;br /&gt;
あと大事なこと。executeの後の項目名は最初大文字で。しないと動かないよ。&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
☆URLとアクションの関係&lt;br /&gt;
Symfonyではモジュール＋アクションのページ構成が基本となる。&lt;br /&gt;
【例】&lt;br /&gt;
member_addモジュールのinputアクションにアクセスするとき。&lt;br /&gt;
http://www.shonanbbs.com/member_add/input&lt;br /&gt;
&lt;br /&gt;
あと、Virtualhostの設定間違えてた･･･＿|￣|○ｺﾞﾒﾝﾖｰ&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName www.kikin.com
    DocumentRoot /home/kikin/web

    &amp;lt;Directory &quot;/home/kikin/web&quot;&amp;gt;
        AllowOverride All
        Options -Includes -ExecCGI
    &amp;lt;/Directory&amp;gt;

&amp;lt;/VirtualHost&amp;gt;

&amp;lt;VirtualHost *:80&amp;gt;
    ServerName www.shonanbbs.com
    DocumentRoot /home/user（要修正）/bbs2/web

    &amp;lt;Directory &quot;/home/user（要修正）/bbs2/web&quot;&amp;gt;
        AllowOverride All
        Options -Includes -ExecCGI
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost
&lt;/pre&gt;&lt;br /&gt;
以上を踏まえて練習問題。&lt;br /&gt;
☆bbs2にblogモジュールを作って出力。&lt;br /&gt;
&lt;br /&gt;
1.PuTTYから一般ユーザーでbbs2に移動→以下実行&lt;br /&gt;
symfony init-module front blog&lt;br /&gt;
Eclipceに移動→F5で/bbs2/apps/front/modules/blogができてるよ。&lt;br /&gt;
&lt;br /&gt;
2.そこのaction.class.phpを開いたら、&lt;br /&gt;
$this-&gt;forward(&#39;default&#39;, &#39;module&#39;);をコメントアウトか&lt;br /&gt;
return sfView::SUCCESS;に置き換えちゃおう。&lt;br /&gt;
&lt;br /&gt;
これの意味の詳しいのは基金訓練WEBで。&lt;br /&gt;
基本return sfView::SUCCESS;しか使わないようだけどね。&lt;br /&gt;
&lt;br /&gt;
3./blog/templatesのindexSuccess.phpに何か書いてみよう。&lt;br /&gt;
&lt;br /&gt;
4.http://www.shonanbbs.com/blogにアクセス。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
CSSのこと。&lt;br /&gt;
&lt;br /&gt;
まあこれもFizzBuzzできてりゃなーんとなくわかると思う。&lt;br /&gt;
Symfony＋CSS使いはかーなーり、重宝されるそうな。&lt;br /&gt;
CSSはテンプレサイトいっぱいあるし、見た目で選べるから楽だよ。&lt;br /&gt;
&lt;br /&gt;
CSSでIDは1ページにひとつだけ。クラスは何個でもOK。&lt;br /&gt;
実際に作ってみました。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/bbs2/apps/front/templates/layout.php
ちょっとだけ崩れてるかも。ごめんよう。
&amp;lt;div id=&quot;header&quot;&amp;gt;
SHONANBBS
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;contentWrappr&quot;&amp;gt;
&amp;lt;div id=&quot;contentLeft&quot;&amp;gt;
&amp;lt;?php echo $sf_data-&amp;gt;getRaw(&#39;sf_content&#39;) ?&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;contentRight&quot;&amp;gt;
MENU
&amp;lt;a href=&quot;/member_add/input&quot;&amp;gt;会員登録&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;clr&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;footer&quot;&amp;gt;
COPYRIGHT &amp;copy; SHONANBBS
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;/*  */&lt;/b&gt;CSSのコメントアウトだよー。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/bbs2/web/css/main.cssの記述
ちょっと違ってるかもだけどごめん。

/* ヘッダ情報 */
#header {
border-bottom:1px solid #ddd;
margin-bottom:10px;
background-color:#228b22;
}
/* ページ全体のレイアウト */
#contentWrappr {
width:850px;
margin:0 auto;
}
/* 左段落レイアウト */
#contentLeft {
width: 600px;
float: left;
}
/* 右段落レイアウト */
#contentRight {
width: 250px;
float: right;
}
/* フッター情報 */
#footer {
border-bottom: 1px solid #ddd;
margin-bottom:10px;
}
/* フロート処理クリア */
.clr {
clear: both;
}
&lt;/pre&gt;&lt;br /&gt;
つかCSS久々過ぎて構文吹っ飛んでたさ・・・。&lt;br /&gt;
思い出したら馬鹿さ加減でもうね｡･ ﾟ･｡* ｡ +ﾟ｡･.｡* ﾟ + ｡･ﾟ･(ﾉД`) &lt;br /&gt;
&lt;br /&gt;
ちょっとメモ。&lt;br /&gt;
デバッグ用アドレス*****_dev.php/&lt;br /&gt;
【例】front_dev.php/&lt;br /&gt;
&lt;br /&gt;
☆練習問題&lt;br /&gt;
&lt;br /&gt;
user_addモジュールにinput、confirm、resultのactionを入れよう。&lt;br /&gt;
ページの内容は名前を入力→確認→完了の流れで作ろう。&lt;br /&gt;
できたらMENUの下に会員登録ってリンクつけてね。&lt;br /&gt;
&lt;br /&gt;
ちょｗｗｗレヴェル高杉ｗｗｗｗｗ&lt;br /&gt;
でした。&lt;br /&gt;
その前の段階の&lt;b&gt;あること&lt;/b&gt;をやってなかったもんで；&lt;br /&gt;
&lt;br /&gt;
同時進行でやるとケアレスミス多発でした。&lt;br /&gt;
構文は間違ってないのにページ出ねえぇええええ！&lt;br /&gt;
&lt;br /&gt;
☆どうもPOSTやGETの説明だったみたい。&lt;br /&gt;
&lt;br /&gt;
actionでは&lt;br /&gt;
$this-&gt;変数 = $this-&gt;getRequestParameter(&quot;変数&quot;);&lt;br /&gt;
これだけでPOSTもGETも処理するんだって。&lt;br /&gt;
&lt;br /&gt;
defaultのaction.class.phpに記述。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  public function executeIndex()
  {
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
 $this-&amp;gt;address = $this-&amp;gt;getRequestParameter(&quot;address&quot;);
 $this-&amp;gt;hobby = $this-&amp;gt;getRequestParameter(&quot;hobby&quot;);
   return sfView::SUCCESS;
  }
&lt;/pre&gt;で、View側。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;HELLO! ENOSHIMA!&amp;lt;br&amp;gt;

私の名前は&amp;lt;?php echo $name;?&amp;gt;です。&amp;lt;br&amp;gt;
住所は&amp;lt;?php echo $address;?&amp;gt;です。&amp;lt;br&amp;gt;
趣味は&amp;lt;?php echo $hobby;?&amp;gt;です。&amp;lt;br&amp;gt;

&amp;lt;hr&amp;gt;

&amp;lt;form action=&quot;/&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot; name=&quot;name&quot;&amp;gt;&amp;lt;br&amp;gt;
住所:&amp;lt;input type=&quot;text&quot; name=&quot;address&quot;&amp;gt;&amp;lt;br&amp;gt;
趣味:&amp;lt;input type=&quot;text&quot; name=&quot;hobby&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;送信&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
このとき最初は表示されなくて、すごく悩んでいたんでつが･･･気づかなかったんでつよ。&lt;br /&gt;
formがfromとか。&lt;br /&gt;
&lt;br /&gt;
なんかね、もう。ばかばかばかばかばかばか。&lt;br /&gt;
&lt;br /&gt;
あとは、別actionのページ作ってください、ってとき。&lt;br /&gt;
newsSuccess.phpと書かねばならないところを、&lt;br /&gt;
news.Success.phpとか書いてた････････････｡&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
･ ﾟ･｡* ｡ +ﾟ｡･.｡* ﾟ + ｡･ﾟ･(ﾉД`) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
それからやっとこの意味がわかった。&lt;br /&gt;
&lt;br /&gt;
対応するビューは各モジュールのtemplatesディレクトリに次のような命名ルールで関連付けられています。&lt;br /&gt;
&lt;br /&gt;
アクション名 + ビューの種類.php&lt;br /&gt;
&lt;br /&gt;
わかるとなんでもないことなんだよなああああああああああ。&lt;br /&gt;
&lt;br /&gt;
明日は這ってでも行くんで、腰痛よ、治まってくれ～～～～。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下超ネタバレ。今後のために自力解決推奨。&lt;br /&gt;
&lt;br /&gt;
1.PuTTY一般ユーザーからbbs2で以下実行&lt;br /&gt;
symfony init-module front member_add&lt;br /&gt;
&lt;br /&gt;
2.action.class.phpを下記に変更&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  public function executeConfirm()
  {
 $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
   return sfView::SUCCESS;
  }
  public function executeInput()
  {
   return sfView::SUCCESS;
  }
  public function executeResult()
  {
   $this-&amp;gt;name = $this-&amp;gt;getRequestParameter(&quot;name&quot;);
   return sfView::SUCCESS;
  }
&lt;/pre&gt;&lt;br /&gt;
3.以下のページ作成&lt;br /&gt;
/bbs2/apps/front/modules/member_add/templates/confirmSuccess.php&lt;br /&gt;
中身&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;名前:&amp;lt;?php echo $name;?&amp;gt;です。&amp;lt;br&amp;gt;

&amp;lt;hr&amp;gt;

&amp;lt;form action=&quot;/member_add/result/&quot; method=&quot;POST&quot;&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;name&quot; value=&quot;&amp;lt;?php echo $name;?&amp;gt;&quot;&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;完了&quot;&amp;gt;

&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
/bbs2/apps/front/modules/member_add/templates/inputSuccess.php&lt;br /&gt;
中身&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;メンバ登録!&amp;lt;br&amp;gt;

&amp;lt;hr&amp;gt;

&amp;lt;form action=&quot;/member_add/confirm/&quot; method=&quot;POST&quot;&amp;gt;
名前:&amp;lt;input type=&quot;text&quot; name=&quot;name&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;確認&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;/bbs2/apps/front/modules/member_add/templates/resultSuccess.php&lt;br /&gt;
中身&lt;br /&gt;
完了しました。&lt;br /&gt;
&lt;br /&gt;
4.http://www.shonanbbs.com/member_add/inputでテスト。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/2118202418530660785/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/323.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/2118202418530660785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/2118202418530660785'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/323.html' title='3/23覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-3137162710970741685</id><published>2011-03-22T17:36:00.000+09:00</published><updated>2011-03-22T17:36:58.115+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="講座、Symfony、VirtualHost"/><title type='text'>3/22覚書</title><content type='html'>1時間目&lt;br /&gt;
1.USBからkikinフォルダをコピー&lt;br /&gt;
・rootからkikinユーザー作成（パスワードは任意）&lt;br /&gt;
2.FFFTPをあげてkikinで新規ホスト作成。IPアドレスはVMWare playerと一緒&lt;br /&gt;
3.接続できたらkikinディレクトリへ1.でコピーした中身をすべてアップロード&lt;br /&gt;
4.vi /etc/httpd/conf/httpd.conf&lt;br /&gt;
を開き下記追加&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;

    DocumentRoot /home/kikin/web
    ServerName www.kikin.com
    ErrorLog logs/kikin.com-error_log
    CustomLog logs/kikin.com-access_log common

    &amp;lt;Directory ~/home/kikin/web~&amp;gt;
        AllowOverride All
        Allow from All

        Options -Includes -ExecCGI
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;ちょっと上にあるNameVirtualHost *:80の前の＃取ってね。&lt;br /&gt;
&lt;br /&gt;
5.Apache再起動&lt;br /&gt;
/etc/init.d/httpd restart&lt;br /&gt;
実行&lt;br /&gt;
&lt;br /&gt;
httpd を停止中:                                            [  OK  ]&lt;br /&gt;
httpd を起動中:                                            [  OK  ]&lt;br /&gt;
&lt;br /&gt;
ってなればおｋだよ&lt;br /&gt;
6.C:\WINDOWS\system32\drivers\etc\hosts\hosts.confをエディタで開いて&lt;br /&gt;
192.168.***.***（自分のIP）       www.kikin.com&lt;br /&gt;
を入れて保存。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
開始8分で停電。&lt;br /&gt;
今後の課題用WEBアプリの設計図を作成。&lt;br /&gt;
自分の好きなこと、やりたいことでおｋだけど、思いつかない人はブログ。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
お昼挟んで停電復旧。&lt;br /&gt;
1～２時間目でやりきれなかった処理を終わらせる。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
パーミッション変更コマンド&lt;br /&gt;
cd /home/でhomeディレクトリに移動して、以下コマンド実行&lt;br /&gt;
chmod -R 755 kikin&lt;br /&gt;
kikinディレクトリのパーミッション（アクセス権）を775に変更する。&lt;br /&gt;
&lt;br /&gt;
cd /home/kikin/config/&lt;br /&gt;
でディレクトリ移動し、&lt;br /&gt;
vi config.php&lt;br /&gt;
でconfig.phpを開く。&lt;br /&gt;
su - kikin&lt;br /&gt;
でkikinユーザーへ移動し、&lt;br /&gt;
symfony fix-perms&lt;br /&gt;
でパーミッション修正。&lt;br /&gt;
symfony cc&lt;br /&gt;
で&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
cd /home/kikin/web/&lt;br /&gt;
に移動&lt;br /&gt;
tar -xvzf img.tar.gz&lt;br /&gt;
で解凍&lt;br /&gt;
一般ユーザーへ変更し以下を実行&lt;br /&gt;
mkdir bbs2&lt;br /&gt;
bbs2ディレクトリ作成&lt;br /&gt;
cd bbs2&lt;br /&gt;
bbs2ディレクトリへ移動&lt;br /&gt;
&lt;br /&gt;
symfony init-project bbs2&lt;br /&gt;
symfonyプロジェクト作成&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
アプリケーションファイル作成&lt;br /&gt;
symfony init-app front&lt;br /&gt;
&lt;br /&gt;
アプリケーションの中にデフォルトモジュール作成&lt;br /&gt;
symfony init-module front default&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
&lt;br /&gt;
vi /etc/httpd/conf/httpd.conf&lt;br /&gt;
を開いて下記追加&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerName www.shonanbbs.com
        DocumentRoot /home/自分のユーザー名/bbs2/web

        &amp;lt;Directory ~/home/自分のユーザー名/bbs2/web~&amp;gt;
                AllowOverride All
                Options -Includes -ExecCGI
        &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
/etc/init.d/httpd restart&lt;br /&gt;
で再起動&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
リモート・システム・エクスプローラー&lt;br /&gt;
&lt;br /&gt;
リモート・システム・エクスプローラーは、Eclipse3.4で新設された機能。&lt;br /&gt;
Eclipseのワークスペースの外のディレクトリーやファイルを参照できる。&lt;br /&gt;
（要するにWindowsのエクスプローラーやftpツールと同じ）&lt;br /&gt;
リモート・システム・パースペクティブ&lt;br /&gt;
&lt;br /&gt;
メニューバーの「ウィンドウ(W)」→「パースペクティブを開く(O)」→「その他(O)」で&lt;br /&gt;
「リモート・システム・エクスプローラー」を選択すると「リモート・システム」パースペクティブが開く&lt;br /&gt;
&lt;br /&gt;
左側ウィンドウで右クリック→新規→接続→SSHのみでOK→ホスト名は自分のIP。&lt;br /&gt;
貼り付ければ接続名も勝手に入る。ID/PASS保存チェック。で完了。&lt;br /&gt;
&lt;br /&gt;
確認メッセージはすべてはい。&lt;br /&gt;
/home/ユーザー名/bbs2/apps/front/modules/defalut/actions/actions.class.phpを開き、&lt;br /&gt;
$this-&gt;forward(&#39;default&#39;, &#39;module&#39;);を削除して&lt;br /&gt;
return sfView::SUCCESS;に置き換え。&lt;br /&gt;
/home/ユーザー名/bbs2/apps/front/modules/defalut/actions/indexSuccess.phpに&lt;br /&gt;
hello enoshima!&lt;br /&gt;
とでもいれませう。&lt;br /&gt;
保存したら次にPuTTYで一般ユーザーでbbs2フォルダへ移動し、&lt;br /&gt;
symfony fix-perms&lt;br /&gt;
symfony cc&lt;br /&gt;
実行。&lt;br /&gt;
これでhelloでたらおｋ。&lt;br /&gt;
&lt;br /&gt;
※なぜかうまくいかーん状況。&lt;br /&gt;
理由はタイプミスですた；&lt;br /&gt;
cd apps/front/modules/&lt;br /&gt;
でモジュールの中見たらdefalutになってた＿|￣|○&lt;br /&gt;
rm -rf defalut/でリネームして落ち着きますた。&lt;br /&gt;
&lt;br /&gt;
明日は地震の埋め合わせの開講。木曜日3/24と5/9は7時間授業やるぞー。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/3137162710970741685/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/322.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3137162710970741685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3137162710970741685'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/322.html' title='3/22覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-1058168278297743408</id><published>2011-03-11T17:45:00.001+09:00</published><updated>2011-03-11T17:46:36.253+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="講座、vi、UNIX、Linuxサーバー準備"/><title type='text'>3/11覚書</title><content type='html'>1時間目&lt;br /&gt;
いよいよサーバー構築。&lt;br /&gt;
まずは準備&lt;br /&gt;
&lt;br /&gt;
★Firewall設定&lt;br /&gt;
SELinux( エスイーリナックス）解除。&lt;br /&gt;
ELinuxとは強制アクセス制御 (MAC) 機能を付加するモジュールの名称。&lt;br /&gt;
Linuxデフォルトのセキュリティソフト。&lt;br /&gt;
これがあるとサーバーの動作、つか学習の邪魔なので無効化して止めます。&lt;br /&gt;
&lt;br /&gt;
VMWare player起動→PuTTYをrootでログイン&lt;br /&gt;
◎vi /etc/sysconfig/selinuxを実行。&lt;br /&gt;
◎6行目にSELINUX=enforcing（有効）とあるので&lt;br /&gt;
↓&lt;br /&gt;
◎SELINUX=disabled（無効）に変更。&lt;br /&gt;
行数は:set numberでわかるよ！&lt;br /&gt;
&lt;br /&gt;
◎rebootでCent OS再起動を命令。これをしないと設定が反映されない。&lt;br /&gt;
PuTTYいったん終了&lt;br /&gt;
Cent OSでログイン画面が出たらPuTTYでrootログイン。&lt;br /&gt;
getenforceを実行してdisabledと出れば成功。違ってたら◎やり直し。&lt;br /&gt;
&lt;br /&gt;
以下から1行ずつコピペでEnter。一文字でも間違えるとサーバー機能喪失で大変なのでコピペ。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#ルールクリア
iptables -F

#icmp(ping) と自端末からの入力を許可
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

#Web、FTP、POP、smtp による接続を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#ssh による接続を許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#TCP の接続開始と応答、FTP データなどを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ルールをセーブする
/etc/init.d/iptables save
&lt;/pre&gt;&lt;br /&gt;
vi /etc/sysconfig/iptablesを開いて&lt;br /&gt;
INPUT ACCEPT [51:3934]（数字は各自異なる）になっていればおｋ&lt;br /&gt;
INPUT DROPの場合はACCEPTに変更&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
★Apacheの設定&lt;br /&gt;
&lt;br /&gt;
Apacheとはhttpを利用するために必要なプログラム。&lt;br /&gt;
yum -y install httpd&lt;br /&gt;
でインストール。&lt;br /&gt;
yum　→インストール用コマンド&lt;br /&gt;
-y　→確認メッセージをすべてYESにするオプション。&lt;br /&gt;
httpd　→Apacheソフトウェアのインストーラー&lt;br /&gt;
&lt;br /&gt;
Complete!で終了。&lt;br /&gt;
&lt;br /&gt;
RUNレベル設定　→Linuxの動作モードレベルのこと。&lt;br /&gt;
Windowsスタータップと捉えておｋ。たいていは7つ設定。&lt;br /&gt;
基本は2-5に切り替えるが、実行させたら自動で割り当ててくれるので気にしなくていい。&lt;br /&gt;
&lt;br /&gt;
/sbin/chkconfig httpd on&lt;br /&gt;
/sbin/chkconfig --list httpd&lt;br /&gt;
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off&lt;br /&gt;
ってなってればおｋ&lt;br /&gt;
できたら&lt;br /&gt;
/etc/init.d/httpd start&lt;br /&gt;
/etc/init.d/httpd restart&lt;br /&gt;
の順で実行。OKが出れば大丈夫。&lt;br /&gt;
&lt;br /&gt;
★MySQLインストール&lt;br /&gt;
&lt;br /&gt;
yum -y install mysql-serverを実行。&lt;br /&gt;
completeまで待つ。&lt;br /&gt;
出たら&lt;br /&gt;
vi /etc/my.cnfで設定ファイルを開く。&lt;br /&gt;
[mysqld]の下に下記追加。&lt;br /&gt;
default-character-set = utf8&lt;br /&gt;
skip-character-set-client-handshake&lt;br /&gt;
character-set-server = utf8&lt;br /&gt;
collation-server = utf8_general_ci&lt;br /&gt;
init-connect = SET NAMES utf8&lt;br /&gt;
さらに[mysqld_safe]の項目の下に追加。&lt;br /&gt;
&lt;br /&gt;
[client]&lt;br /&gt;
default-character-set = utf8&lt;br /&gt;
[mysql]&lt;br /&gt;
default-character-set = utf8&lt;br /&gt;
[mysqldump]&lt;br /&gt;
default-character-set = utf8&lt;br /&gt;
&lt;br /&gt;
そしてRUNレベル設定。&lt;br /&gt;
/sbin/chkconfig mysqld on&lt;br /&gt;
/sbin/chkconfig --list mysqld&lt;br /&gt;
&lt;br /&gt;
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off&lt;br /&gt;
ってなってればおｋ。&lt;br /&gt;
そんでMySQLサーバー起動。&lt;br /&gt;
/etc/init.d/mysqld start&lt;br /&gt;
MySQL を起動中:                                            [  OK  ]&lt;br /&gt;
mysqldのdはdemon、裏側で実行するプログラム、プロセスと同意義。&lt;br /&gt;
MySQLの動作を支える縁の下の力持ち&lt;br /&gt;
&lt;br /&gt;
そしたらプロンプトと同じように&lt;br /&gt;
mysql -u root&lt;br /&gt;
rootで入る。パスワードはまだ決めてませんので、ていうか&lt;br /&gt;
&lt;b&gt;いままでのMySQLと動いている場所が違うので、既存ユーザーは使えません。&lt;br /&gt;
データもありません。これから作ります。&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
★vsftpdのインストール&lt;br /&gt;
サーバーにFTPプロトコルのリクエストを受け取るためのプログラム&lt;br /&gt;
HTTPとは別にアップロードに必要。&lt;br /&gt;
yum -y install vsftpd&lt;br /&gt;
completeで完了。&lt;br /&gt;
&lt;br /&gt;
/sbin/chkconfig vsftpd on&lt;br /&gt;
/sbin/chkconfig --list vsftpd&lt;br /&gt;
で&lt;br /&gt;
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off&lt;br /&gt;
こうなってたらおｋ&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
★FFFTPにVMWareの接続設定を保存。&lt;br /&gt;
接続名はVMWare。IPアドレスはPuTTYのifconfigで確認だよ。&lt;br /&gt;
ユーザー名はPuTTYで決めた一般ユーザーとパスワードを使うよ。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir-NBqCQaPQ1qU2uw06zjfEQBQ0iJzVFltKfib0BQH16LKAVIFX4cGTZn-fRdrCB7xzXD10CANAKwReoN0RDua72B6xBew2qlvBc-PHfa7kmGu04vcZWF2eVxZOvVj8xNbEJNM4ZMS-d4X/s1600/ffftp01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;298&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir-NBqCQaPQ1qU2uw06zjfEQBQ0iJzVFltKfib0BQH16LKAVIFX4cGTZn-fRdrCB7xzXD10CANAKwReoN0RDua72B6xBew2qlvBc-PHfa7kmGu04vcZWF2eVxZOvVj8xNbEJNM4ZMS-d4X/s512/ffftp01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
☆うまく接続できなかった場合☆&lt;br /&gt;
vfftpdの設定不備かSElinuxの設定不備のどちらかの可能性高し。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
★PHPインストール&lt;br /&gt;
yumで入れるとVer5.1になってしまうので、手動インストールで最新Verへ。&lt;br /&gt;
取得先のGPG-KEY 取得&lt;br /&gt;
rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka&lt;br /&gt;
DL先の設定&lt;br /&gt;
vi /etc/yum.repos.d/utterramblings.repo&lt;br /&gt;
を実行し、開いたら中は何も無いので下記コピペ&lt;br /&gt;
内容はDL先をローカルからサーバーに変更する。&lt;br /&gt;
[utterramblings]&lt;br /&gt;
name=Jason&#39;s Utter Ramblings Repo&lt;br /&gt;
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka&lt;br /&gt;
保存したらつぎ～&lt;br /&gt;
&lt;br /&gt;
yum -y install php&lt;br /&gt;
でphpインストール。下も続けて1行ずつ&lt;br /&gt;
yum -y install php-devel&lt;br /&gt;
yum -y install php-common&lt;br /&gt;
yum -y install php-gd php-mbstring php-pdo php-mcrypt php-mysql php-ncurses php-xml&lt;br /&gt;
&lt;br /&gt;
php -vでVer確認&lt;br /&gt;
PHP 5.2.16 (cli) (built: Dec 17 2010 14:09:03)&lt;br /&gt;
でおｋ&lt;br /&gt;
&lt;br /&gt;
★Symfonyインストール&lt;br /&gt;
yum -y install php-pear&lt;br /&gt;
pear channel-discover pear.symfony-project.com&lt;br /&gt;
pear install symfony/symfony-1.0.20&lt;br /&gt;
&lt;br /&gt;
symfony -V（大文字）で&lt;br /&gt;
symfony version 1.0.20と出れば完了&lt;br /&gt;
&lt;br /&gt;
開発環境準備ここまで&lt;br /&gt;
&lt;br /&gt;
PuTTY、VMWare、FFFTP終了。&lt;br /&gt;
VMWare再起動したらCent OSを削除。&lt;br /&gt;
自力でCent OS再インストールして。&lt;br /&gt;
&lt;b&gt;今日やったこと全部自力でやり直せ。&lt;/b&gt;と。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
再インストール続き。&lt;br /&gt;
面倒だから工程省略。&lt;br /&gt;
IP変わらなかったんでPuTTY設定生きるよ。&lt;br /&gt;
PuTTYセキュリティ警告。出たらここははいで通した。めんどいから。&lt;br /&gt;
&lt;br /&gt;
ここから地震のため混乱；&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
2回目reboot忘れたからFTPログインできなかった･･･reboot2回目後正常。&lt;br /&gt;
作業完了。&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
再インストール一通り終わったら、自分のIPをブラウザで入れてApacheが出るか確認。&lt;br /&gt;
出たら&lt;br /&gt;
&lt;br /&gt;
cd /var/www/html/&lt;br /&gt;
でhtmlフォルダに移動。&lt;br /&gt;
vi index.html&lt;br /&gt;
作成したらhello! world!と入れて保存。&lt;br /&gt;
ls -al&lt;br /&gt;
でファイル確認。&lt;br /&gt;
IP開きなおすと、index.htmlで保存した文字が出てくる。&lt;br /&gt;
&lt;br /&gt;
以上をゆっきー＆ばおさんへレクチャーして終了。&lt;br /&gt;
バーミッションの設定とかどうなるのかなー。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/1058168278297743408/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/311.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/1058168278297743408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/1058168278297743408'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/311.html' title='3/11覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir-NBqCQaPQ1qU2uw06zjfEQBQ0iJzVFltKfib0BQH16LKAVIFX4cGTZn-fRdrCB7xzXD10CANAKwReoN0RDua72B6xBew2qlvBc-PHfa7kmGu04vcZWF2eVxZOvVj8xNbEJNM4ZMS-d4X/s72-c/ffftp01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-922751103334466826</id><published>2011-03-10T17:23:00.000+09:00</published><updated>2011-03-10T17:23:41.085+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="講座、vi、UNIX"/><title type='text'>3/10覚書</title><content type='html'>&lt;div style=&quot;color: red;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;大前提：フォルダという表記は今後ディレクトリにします。&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
1時間目&lt;br /&gt;
vi新規作成から、前回の復習。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
PuTTY即ログイン&lt;br /&gt;
ただしwindws、OSのログインパスワード、セキュリティが確立している状態でのみ推奨。&lt;br /&gt;
デスクトップにputtyのショートカットを作成&lt;br /&gt;
ショートカットを右クリックし、プロパティをクリック&lt;br /&gt;
リンク先を以下のように修正し、OKをクリック&lt;br /&gt;
&quot;C:\Program Files\PuTTY\putty.exe&quot; -load 接続セッション名 -l &quot;ユーザ名&quot; -pw &quot;パスワード&quot;&lt;br /&gt;
そのショートカットをランチャーに設定すると、毎回ユーザ情報を入力する必要がなくなります。&lt;br /&gt;
&lt;br /&gt;
それからclnchへそのショートカットドラッグ。名前は自分でわかれば何でもおｋ。&lt;br /&gt;
&lt;br /&gt;
そんでホットキー設定。&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/craftware/clnch&quot;&gt;CraftLaunch&lt;/a&gt;（クラフトランチ）だよ。&lt;br /&gt;
以下ランチャーと呼ぶよー。&lt;br /&gt;
入れたらクリックしてCキーを押せばConfigが出るから十字キーで選択してEnter。&lt;br /&gt;
ホットキー割り当て選択してEnter。&lt;br /&gt;
Ctrl＋Shift＋Spaceキー同時押ししてC-S-Spaceと画面にでたらEnter。&lt;br /&gt;
確認方法はランチャー以外の箇所をクリックするとランチャーに日付と時刻が出るよ。&lt;br /&gt;
Ctrl＋Shift＋Spaceキー同時押ししてランチャーが黒くなれば成功だよ。&lt;br /&gt;
いちいちクリックしなくていいから楽ちんなのだ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoR8Mt8aGSrFVY4hWzAfJTWebFP9L6wuLZ4hNctuFyuxTOq_jIpEz5RhNIXsiZwzd4E_DhKcaGKJCTzBpbIA_Vr2XSY438P1WBuNTzy0LT1uHlBsidCr3HJ6HpAXRy0vNDxQOViiCYiiC5/s1600/clnch01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoR8Mt8aGSrFVY4hWzAfJTWebFP9L6wuLZ4hNctuFyuxTOq_jIpEz5RhNIXsiZwzd4E_DhKcaGKJCTzBpbIA_Vr2XSY438P1WBuNTzy0LT1uHlBsidCr3HJ6HpAXRy0vNDxQOViiCYiiC5/s400/clnch01.png&quot; width=&quot;189&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
残りの時間はviの操作の練習。&lt;br /&gt;
画面移動Shift＋H（high）、M（middle）、L（Low）&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
vi操作続き&lt;br /&gt;
&lt;br /&gt;
文頭、文末の処理がちょいと面倒だね。&lt;br /&gt;
そんなときのためにShift+＄があるんだけどねー。&lt;br /&gt;
ただ、endキーで慣れてるんでちょっと使いづらいねえ。&lt;br /&gt;
ちなみにvi側で選択＝コピーのキャッシュはこっち側で貼り付け可能だよー。&lt;br /&gt;
&lt;br /&gt;
上級者向けつかいいんちょから。&lt;br /&gt;
&lt;a href=&quot;http://hp.vector.co.jp/authors/VA016670/unix/vi_reference.html&quot;&gt;vi コマンドリファレンス&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
☆UNIXコマンド&lt;br /&gt;
&lt;br /&gt;
｜パイプ&lt;br /&gt;
【例】ls -al |wc　&lt;br /&gt;
wcはファイルの行数、単語数、サイズを表示&lt;br /&gt;
｜（パイプ）でつなげて結果を表示させる。&lt;br /&gt;
＞リダイレクション&lt;br /&gt;
【例】ls -al &amp;gt; test.txt&lt;br /&gt;
＞はリダイレクト。コマンド情報をファイルに出力できる。&lt;br /&gt;
vi test.txtで開くとls -alの内容が中に記述されている。&lt;br /&gt;
【例】ls -al |wc &amp;gt; test2.txt&lt;br /&gt;
というふうにつなげることもできる。&lt;br /&gt;
wcの結果をtest2.txtに出力させるという命令。&lt;br /&gt;
&lt;br /&gt;
ディレクトリ移動&lt;br /&gt;
cd（カレントディレクトリの意）&lt;br /&gt;
cd ..でひとつ上の階層へ。&lt;br /&gt;
&lt;br /&gt;
/home/yamazaki&lt;br /&gt;
[yamazaki@localhost ~]$ cd ..（いっこ上の階層）&lt;br /&gt;
[yamazaki@localhost home]$ pwd（現在地表示）&lt;br /&gt;
/home&lt;br /&gt;
[yamazaki@localhost home]$ cd ..&lt;br /&gt;
[yamazaki@localhost /]$ pwd&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
戻り方は2通り。どちらでも同じディレクトリを開く。&lt;br /&gt;
[yamazaki@localhost ~]$ cd /home/yama&lt;br /&gt;
[yamazaki@localhost ~]$ cd ../yama&lt;br /&gt;
直前のディレクトリに戻るのに、cd -もできるよー。&lt;br /&gt;
&lt;br /&gt;
★豆知識★&lt;br /&gt;
ls -alしたときに右端の文字が青かったらディレクトリを示す。&lt;br /&gt;
赤かったら圧縮されている。&lt;br /&gt;
&lt;br /&gt;
ディレクトリ作成&lt;br /&gt;
mkdir ディレクトリ名&lt;br /&gt;
&lt;br /&gt;
ファイルの削除&lt;br /&gt;
rm ファイル名&lt;br /&gt;
&lt;br /&gt;
ディレクトリごと削除するにはオプション -rを付ける&lt;br /&gt;
rはrecursive(再帰的)の略&lt;br /&gt;
rm -r ディレクトリ名&lt;br /&gt;
&lt;br /&gt;
ファイル（ディレクトリ）移動&lt;br /&gt;
mv ファイル（ディレクトリ）名 移動先&lt;br /&gt;
【例】mv yama1.txt /home/yamazaki/yama1/&lt;br /&gt;
&lt;br /&gt;
ファイルコピー＆別ディレクトリへ移動&lt;br /&gt;
【例】cp 0310-01.txt yama1.txt | xargs mv yama1.txt /home/yamazaki/yama1/&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
catコマンド&lt;br /&gt;
内容表示。&lt;br /&gt;
【例】cat test4.txt&lt;br /&gt;
長いファイルの場合は|moreで1画面を出し、Enterで1行ずつ見える。&lt;br /&gt;
【例】cat test4.txt | more&lt;br /&gt;
&lt;br /&gt;
headコマンド&lt;br /&gt;
ファイルの先頭内容10行を見ることができる。-nで行数指定可能。&lt;br /&gt;
【例】head -n 3 yama1.txt&lt;br /&gt;
&lt;br /&gt;
tail -f リアルタイムにファイルの末尾内容10行を見ることができる。-nで行数指定可能。&lt;br /&gt;
サーバーのログファイルをチェックするときに使う。&lt;br /&gt;
【例】tail -f  -n 3 yama1.txt&lt;br /&gt;
&lt;br /&gt;
ファイルの圧縮、解凍&lt;br /&gt;
複数指定もこんな感じで。&lt;br /&gt;
【例】tar -cvzf ptest.tar.gz test2.txt test3.txt test4.txt&lt;br /&gt;
&lt;br /&gt;
cronコマンド&lt;br /&gt;
今はコマンドの元が無いので使えませぬ。&lt;br /&gt;
&lt;br /&gt;
findコマンド&lt;br /&gt;
検索機能。&lt;br /&gt;
場所も名前もわからないときは【例】find / -name ファイル名で検索すればいいのだ。&lt;br /&gt;
日付で出すのも有効。&lt;br /&gt;
今のぼくらは【例】find ./ -mtime -1で出てくるのだ。&lt;br /&gt;
昨日作ったばかりだからね。&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
grepコマンド&lt;br /&gt;
検索対象の文字とファイル内容が一致するか検索&lt;br /&gt;
練習準備&lt;br /&gt;
yama1、2、3のディレクトリにtest.txt作成。&lt;br /&gt;
内容は&lt;br /&gt;
test&lt;br /&gt;
hello&lt;br /&gt;
nya&lt;br /&gt;
nyanya&lt;br /&gt;
を適当に入れる。入れる項目はすべて同じにはしません。ちょっとだけ変えます。&lt;br /&gt;
grep -r -l test ./&lt;br /&gt;
今のディレクトリすべてを対象に、testという言葉が入っているか調べて、&lt;br /&gt;
パターンに一致した行を含むファイル名だけを出力する。&lt;br /&gt;
ほかhelloやnyaでも調べる。&lt;br /&gt;
&lt;br /&gt;
lnコマンド&lt;br /&gt;
Windowsショートカットと一緒&lt;br /&gt;
classや画像のインクルード時に活用。&lt;br /&gt;
ln -s リンク元( 実体) リンク名&lt;br /&gt;
【例】ln -s yama1 ya1&lt;br /&gt;
&lt;br /&gt;
duコマンド（rootで入ってから操作）。&lt;br /&gt;
指定したディレクトリ内の全てのファイルとディレクトリサイズを確認する時に使う。&lt;br /&gt;
【例】du -k /var&lt;br /&gt;
ディレクトリ全体のサイズを確認する場合はオプション sをつける。&lt;br /&gt;
【例】du -s /var&lt;br /&gt;
ファイルサイズをわかりやすくするには-hをつける。&lt;br /&gt;
【例】du -s -h /var&lt;br /&gt;
&lt;br /&gt;
killコマンド&lt;br /&gt;
プロセス強制終了。&lt;br /&gt;
各プロセスはtopで確認。右端のCOMMANDだよ。&lt;br /&gt;
&lt;br /&gt;
wgetコマンド&lt;br /&gt;
直ダウンロード＆サーバーうｐ&lt;br /&gt;
&lt;br /&gt;
xargs（エックスアーグズ）コマンド&lt;br /&gt;
xargsは、標準入力から受け取ったものを引数として、他のコマンドを起動するコマンドです。&lt;br /&gt;
【例】find ./ -name &quot;hello*&quot; | xargs rm -f&lt;br /&gt;
今のディレクトリからhelloを含むものを探し、さらに削除します。&lt;br /&gt;
発展系&lt;br /&gt;
【例】find ./ -type d -name &quot;yama&quot; | xargs ls -la&lt;br /&gt;
今のディレクトリからディレクトリ名にyamaを含む項目のみリスト表示します。&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
今日の復習&lt;br /&gt;
&lt;br /&gt;
vi終了したーい:q!だたね；　いまいち掴めん・・・。&lt;br /&gt;
コマンド入力中にEnterしちゃった→Ctrl+Cで抜けます。&lt;br /&gt;
&lt;br /&gt;
IDManagerをメモ帳代わりにすると今後楽。&lt;br /&gt;
ホットキーCtrl+I+OでIDManager起動できるお。&lt;br /&gt;
&lt;br /&gt;
おすすめサイト&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.k-tanaka.net/unix/&quot;&gt;UNIXコマンド&lt;/a&gt;推奨。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://openlab.dino.co.jp/2008/02/20/133431188.html&quot;&gt;いまさらxargsの便利さを主張してみる&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tm.root-n.com/unix:command:xargs&quot;&gt;条件にヒットしたファイルを ~/backup にコピーする&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://q.hatena.ne.jp/1164733001&quot;&gt;Loadaverageが50以上？はてな掲示板より&lt;/a&gt;　例題のような感じ。&lt;br /&gt;
&lt;a href=&quot;http://pc.casey.jp/archives/137292546&quot;&gt;ロードアベレージが86.29&lt;/a&gt;　実体験の様子。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/922751103334466826/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/310.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/922751103334466826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/922751103334466826'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/310.html' title='3/10覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoR8Mt8aGSrFVY4hWzAfJTWebFP9L6wuLZ4hNctuFyuxTOq_jIpEz5RhNIXsiZwzd4E_DhKcaGKJCTzBpbIA_Vr2XSY438P1WBuNTzy0LT1uHlBsidCr3HJ6HpAXRy0vNDxQOViiCYiiC5/s72-c/clnch01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-701543681786968433</id><published>2011-03-08T16:44:00.002+09:00</published><updated>2011-03-11T13:05:36.476+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="VMWARE"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/8覚書</title><content type='html'>1時間目&lt;br /&gt;
お掃除。&lt;br /&gt;
VMWAREとCentOSのインストール。&lt;br /&gt;
ファイルサイズがGB単位なのでUSBメモリでコピー。&lt;br /&gt;
っても待ち時間にVMWAREはDLした。&lt;br /&gt;
さすがにUSBが一個なので時間かかる･･････。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
ファイルコピー終わらず･････&lt;br /&gt;
USB2個あればなぁｗｗｗｗ&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
vmware とは、クライアントのマシンに仮想サーバを構築するためのソフト。&lt;br /&gt;
開発現場でも、vmware で個人用開発環境を構築し、&lt;br /&gt;
そこで開発したプログラムを本番環境に移すという開発フローを取っている人が多い。&lt;br /&gt;
&lt;br /&gt;
vmware playerのインストール&lt;br /&gt;
* vmware playerをダウンロードする&lt;br /&gt;
* ダウンロードしたVMware-player-3.1.2-301548.exeをクリックしインストールを開始する&lt;br /&gt;
* すべて「次へ」で最後にパソコンの再起動を行なう&lt;br /&gt;
* デスクトップに出来ているvmware player のショートカットをクリックし起動する。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;次回からは起動してCent OS選択して仮想マシンの再生→PuTTYで実行。&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
CentOSのインストール &lt;br /&gt;
&lt;br /&gt;
コピーしたCentOS-5.5-i386-bin-DVD.isoを&lt;br /&gt;
マイドキュメントに生成されたMy Virtual Machinesへドラッグ。&lt;br /&gt;
マウスカーソルの動作はCent OSかWindowsか切り替えが必要。&lt;br /&gt;
Cent OSから戻るときはCtrl+Altで抜ける。&lt;br /&gt;
サーバー管理者パスワードは6文字以上で設定。&lt;br /&gt;
細かい手順は訓練サイトみて。&lt;br /&gt;
☆POINT&lt;br /&gt;
【Desktop-Gnome】のチェック除外→Cent OSのデスクトップ画面を使わない。&lt;br /&gt;
つかサーバーなんだし要らないよ。重くなるし。現場環境に合わせるのだ。&lt;br /&gt;
【今すぐカスタマイズ】で選択し左メニューから【開発】、右のセレクトボックスで&lt;br /&gt;
【レガシーなソフトウェアの開発】と【開発ツール】、【開発ライブラリ】にチェック&lt;br /&gt;
これをしないとコンパイルの際にライブラリが無いといわれてしまう。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
rootでログイン。さっき決めたパスワード（非表示）を入力して&lt;br /&gt;
root@localhostが出たら成功。&lt;br /&gt;
ifconfigを入力してinet addrの192.168.～をメモ。&lt;br /&gt;
putty起動してホストにメモった192.168.～を入力。ポートはデフォルト22まま。&lt;br /&gt;
セッション接続名は任意だがVMWAREとでもつけて保存。&lt;br /&gt;
そして開き、またrootとパスワード（ここも非表示）&lt;br /&gt;
&lt;br /&gt;
Cent OSはあまりいじらないが、&lt;br /&gt;
root（管理者）ユーザーのままだと危険なので別ユーザーを作る。&lt;br /&gt;
&lt;br /&gt;
☆以降PuTTYで操作。&lt;br /&gt;
PuTTYでuseradd 半角ユーザー名。変化無ければ作成成功。&lt;br /&gt;
パスワードはpasswd ユーザー名で変更可能&lt;br /&gt;
パスワードを聞かれるので2回パスワードを入力する&lt;br /&gt;
exitでPuTTY終了。PuTTY再起動で設定したユーザー名とパスワードでログイン。&lt;br /&gt;
&lt;br /&gt;
あとセッション切れ防止のための処理。&lt;br /&gt;
まずは設定したセッション選択して読み込み。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8AY8WYQECINehDkTZkroBZ4Ug_sgzUA0uCyLjmKpTVNdNDbP-7jUha5OnJKougTs2mamZUttb9JgqLC0xFG0OrByrExRu78063LBj7Na0y4vIDh971Wfui7tlmgNL7T9pT9j-PAtrwm1/s1600/puttyst02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;321&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8AY8WYQECINehDkTZkroBZ4Ug_sgzUA0uCyLjmKpTVNdNDbP-7jUha5OnJKougTs2mamZUttb9JgqLC0xFG0OrByrExRu78063LBj7Na0y4vIDh971Wfui7tlmgNL7T9pT9j-PAtrwm1/s512/puttyst02.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
左側メニューの接続からkeepaliveの数値を300に変更して、&lt;br /&gt;
セッションを再度選択して保存。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZFz4MOLAPTv1V1vG7Z9W9ZczCtgByYy2AG6cv0WdFTpstcPzr7rY_LwDre3LX_CyK84DcLY6KGbVwaAX6uB3AR9ZNG_8DNTbmawFvo6-NmJlS11tJCIAEKCDJEFTUFN6oE9YVjFn5Si0t/s1600/puttyst03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;321&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZFz4MOLAPTv1V1vG7Z9W9ZczCtgByYy2AG6cv0WdFTpstcPzr7rY_LwDre3LX_CyK84DcLY6KGbVwaAX6uB3AR9ZNG_8DNTbmawFvo6-NmJlS11tJCIAEKCDJEFTUFN6oE9YVjFn5Si0t/s512/puttyst03.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
☆文字化け時の対策はUTF-8（CJK）を選択。変換と同じ処理で保存ｵﾇﾇﾒ。&lt;br /&gt;
&lt;br /&gt;
su(switch userコマンド)で追加したユーザになり、自分のルートディレクトリを表示する&lt;br /&gt;
ちなみに[ユーザー名@localhost~]$は一般ユーザー。&lt;br /&gt;
[ユーザー名@localhost~]#は管理者です。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid54MmZhbYLw5DU7NKAfS7y5d60ScGc1eGgvdFTwaD2HiZCxQTVOFLhtV62V9MvskeK-w2qUCWE2W7hCkchj9s288-G0PGMgW40Uq1uJHmKhowk8jc6SL4OUeoENOPIk9-JlBxA68pfI1j/s1600/puttyst04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;321&quot; width=&quot;530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid54MmZhbYLw5DU7NKAfS7y5d60ScGc1eGgvdFTwaD2HiZCxQTVOFLhtV62V9MvskeK-w2qUCWE2W7hCkchj9s288-G0PGMgW40Uq1uJHmKhowk8jc6SL4OUeoENOPIk9-JlBxA68pfI1j/s530/puttyst04.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
ユーザー変更は&lt;br /&gt;
su ユーザー名で変更。suだけだとrootへスイッチ（ただし権限は元ユーザーのまま）。&lt;br /&gt;
ここからexitすると元のユーザーに戻る。&lt;br /&gt;
su -を実行するとスイッチ先のユーザーの権限（環境変数）へ移行できる。&lt;br /&gt;
&lt;br /&gt;
【練習】&lt;br /&gt;
・ユーザーを新規追加。&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
&lt;br /&gt;
VI操作&lt;br /&gt;
UNIX 環境の標準テキストエディタ&lt;br /&gt;
特徴&lt;br /&gt;
* コマンドモードとテキスト入力モードがある。&lt;br /&gt;
* 独特なキー操作&lt;br /&gt;
* 軽い&lt;br /&gt;
他にemaxというエディタもあるが、VIが標準装備。&lt;br /&gt;
コマンド&lt;br /&gt;
pwd　自分のディレクトリ表示&lt;br /&gt;
ls -al自ディレクトリのファイル一覧を表示&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi test.textで作成。最初はコマンドモードなのでテキスト入力モードへ切り替え。&lt;br /&gt;
iキーで変更可能。ESCでコマンドモードに変わる。&lt;br /&gt;
保存はESC押してから:wq!で保存され、コマンドモードに戻る。小文字でコマンドと認識。&lt;br /&gt;
wq（Write &amp; Quit）!（強制）&lt;br /&gt;
vi 既存ファイル名（拡張子必須）で既存ファイルが開ける。&lt;br /&gt;
&lt;br /&gt;
6時間目&lt;br /&gt;
Hキー：左&lt;br /&gt;
Lキー：右&lt;br /&gt;
Kキー：上&lt;br /&gt;
Jキー：下&lt;br /&gt;
&lt;br /&gt;
キーボードでカーソル移動。マウスが無かった時代に&lt;br /&gt;
ホームポジションでカーソル移動ができるようにした工夫。&lt;br /&gt;
文字がある箇所のみ→キーで次の行に移動できるが、&lt;br /&gt;
文字が続いていない場合はJキーで下げる必要がある。&lt;br /&gt;
&lt;br /&gt;
文字挿入はESCでコマンドでカーソル移動、iキーで挿入、ESCでコマンド移動&lt;br /&gt;
おまけに行が続くとJキー/Kキーで下の行えらべねええええええ。&lt;br /&gt;
&lt;br /&gt;
コピー＆ペースト&lt;br /&gt;
コピーしたい箇所を選択するだけでコピーされ、右クリックで貼り付け&lt;br /&gt;
行数表示&lt;br /&gt;
:set numberで行数表示/:set no numberで非表示&lt;br /&gt;
&lt;br /&gt;
補完機能&lt;br /&gt;
ファイル名の先頭文字を入れてTabキーを押すと補完し、複数の場合は候補表示してくれる。&lt;br /&gt;
&lt;br /&gt;
ていうかここ参照でいいような。&lt;br /&gt;
細かい解説&lt;br /&gt;
&lt;a href=&quot;http://www.itsenka.com/contents/development/vi/&quot;&gt;viコマンド リファレンス&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
その中間かな？解説&lt;br /&gt;
&lt;a href=&quot;http://uguisu.skr.jp/Windows/vi.html&quot;&gt;vi / vim コマンド一覧&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
大きな文字でやさしく解説&lt;br /&gt;
&lt;a href=&quot;http://lpic-syosinsya.com/26/30/000065.php&quot;&gt;viエディタでの編集・操作コマンド&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/701543681786968433/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/38.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/701543681786968433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/701543681786968433'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/38.html' title='3/8覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8AY8WYQECINehDkTZkroBZ4Ug_sgzUA0uCyLjmKpTVNdNDbP-7jUha5OnJKougTs2mamZUttb9JgqLC0xFG0OrByrExRu78063LBj7Na0y4vIDh971Wfui7tlmgNL7T9pT9j-PAtrwm1/s72-c/puttyst02.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-3394741855497746213</id><published>2011-03-07T14:53:00.001+09:00</published><updated>2011-03-07T14:55:14.345+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smarty"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/7覚書</title><content type='html'>1時間目&lt;br /&gt;
二次元配列の肝がｷﾀ━━ﾟ+.ヽ(≧▽≦)ﾉ.+ﾟ━━ ｯ ! ! !&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;kuku.php

require( &quot;./libs/Smarty.class.php&quot; );
$smarty = new Smarty();

for ($i = 1; $i &amp;lt; 10; $i++) {
 for ($j = 1; $j &amp;lt; 10; $j++) {
  //二次元配列の生成
  $num[$i][] = $i*$j;
  }
}

$smarty -&amp;gt; assign( &quot;num&quot;, $num );
$smarty -&amp;gt; display(&quot;kuku.tpl&quot;);

kuku.tpl

&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html&quot;; charset=&quot;UTF-8&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;table border=1&amp;gt;
&amp;lt;caption&amp;gt;九九の段・二次元配列&amp;lt;/caption&amp;gt;
 &amp;lt;tr&amp;gt;
 {foreach from = $num item = n}
  {foreach from = $n item = c}
  &amp;lt;td height=&quot;25&quot; width=&quot;25&quot; align=&quot;center&quot;&amp;gt;
  {$c}
  &amp;lt;/td&amp;gt;
  {/foreach}
 &amp;lt;/tr&amp;gt;
 {/foreach}
&amp;lt;/table&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;span style=&quot;font-size: 120%;&quot;&gt;&lt;b&gt;$num[$i][]にすることで二次元配列となる。&lt;br /&gt;
[$i]&lt;br /&gt;
☆1～9までの数字が入る&lt;br /&gt;
[]&lt;br /&gt;
☆入れ子のforが回るたびに$i*$jの値が追加されていく&lt;br /&gt;
$num[$i][1(1*1)][2][3][4][5].....&lt;br /&gt;
[$i][2(2*1)][4][6][8][10].....&lt;br /&gt;
[$i][3(3*1)][6][9][12][15].....&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
二次元配列を元にBBSのreplyも出すよー。&lt;br /&gt;
&lt;br /&gt;
方法は二つ。&lt;br /&gt;
whileを入れ子にする。&lt;br /&gt;
→この方法はやぎーに聞いてくだしあ；&lt;br /&gt;
whileを入れ子にしない。&lt;br /&gt;
おいらはこっち。&lt;br /&gt;
【必須】commentのidとreplyのidを紐付ける。&lt;br /&gt;
&lt;br /&gt;
index.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;require( &quot;./libs/MySmarty.class.php&quot; );

//mysql に接続する
require_once &#39;./db_connect.php&#39;;

// クエリを送信する
$sql = &quot;SELECT * FROM comment where delete_flg = 0 order by created_at desc&quot;;
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
 $data[] = $row;
}

//クエリを送信する（返信テーブル）
$sql = &quot;SELECT * FROM reply where delete_flg=0 order by created_at desc&quot;;
$result1 = mysql_query($sql);

while ($row2 = mysql_fetch_array($result1)) {
 $repdata[] = $row2;
}

$smarty = new MySmarty();
$smarty -&amp;gt; assign( &quot;index_list&quot;, $data );
$smarty -&amp;gt; assign( &quot;reply_list&quot;, $repdata );
$smarty -&amp;gt; display( &quot;index.tpl&quot; );

//print_r($data);
//print_r($repdata);
&lt;/pre&gt;&lt;br /&gt;
index.tpl&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;!-- 投稿内容 --&amp;gt;
{{foreach from = $index_list item =num}}
 &amp;lt;div style=&quot;border:1px solid #ddd;margin-bottom:10px;padding:5px;&quot;&amp;gt;
 {{if $num.url neq NULL}}
 &amp;lt;a href=&quot;{{$num.url}}&quot;&amp;gt;{{$num.nickname}}&amp;lt;/a&amp;gt; さんの投稿
 {{else}}{{$num.nickname}}さんの投稿
 {{/if}}
 &amp;nbsp;
 {{if $num.mail1 neq NULL}}
 &amp;lt;a href=&quot;mailto:{{$num.mail1}}&quot;&amp;gt;メール&amp;lt;/a&amp;gt;
 {{/if}}
 &amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;./delete.php?comment_id={{$num.id}}&quot;&amp;gt;削除&amp;lt;/a&amp;gt;
 &amp;lt;br&amp;gt;
 {{$num.content}}
 &amp;lt;br&amp;gt;
 {{if $num.photo neq NULL}}
 &amp;lt;IMG SRC=&quot;./img/{{$num.photo}}&quot; width=200&amp;gt;
 {{/if}}
 &amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
 {{if $num.photo2 neq NULL}}
 &amp;lt;IMG SRC=&quot;./img2/{{$num.photo2}}&quot; width=200&amp;gt;
 {{/if}}
 &amp;lt;br&amp;gt;
 {{$num.created_at}}
 &amp;lt;br&amp;gt;
 &amp;lt;a href=&quot;reply.php?comment_id={{$num.id}}&quot;&amp;gt;返信する&amp;lt;/a&amp;gt;
 &amp;lt;/div&amp;gt;

 &amp;lt;!-- 返信内容 --&amp;gt;
  {{foreach from = $reply_list item =num2}}
   {{if $num2.comment_id eq $num.id}}
   {{*commentのidとreplyのidを紐付ける。*}}
 &amp;lt;div style=&quot;border:1px solid #ddd;margin-bottom:10px;padding:5px;
  background-color:#f3f3f3;margin-left:40px;&quot;&amp;gt;
 {{if $num2.url neq NULL}}
 &amp;lt;a href=&quot;{{$num2.url}}&quot;&amp;gt;{{$num2.nickname}}&amp;lt;/a&amp;gt; さんの投稿
 {{else}}{{$num2.nickname}}さんの投稿
 {{/if}}
 &amp;nbsp;
 {{if $num2.reply_mail neq NULL}}
 &amp;lt;a href=&quot;mailto:{{$num2.reply_mail}}&quot;&amp;gt;メール&amp;lt;/a&amp;gt;
 {{/if}}
 &amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;./reply_delete.php?comment_id={{$num2.id}}&quot;&amp;gt;削除&amp;lt;/a&amp;gt;
 &amp;lt;br&amp;gt;
 {{$num2.content}}
 &amp;lt;br&amp;gt;
 {{if $num2.reply_photo neq NULL}}
 &amp;lt;IMG SRC=&quot;./reply_photo/{{$num2.reply_photo}}&quot; width=200&amp;gt;
 {{/if}}
 &amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
 {{if $num2.reply_photo2 neq NULL}}
 &amp;lt;IMG SRC=&quot;./reply_photo2/{{$num2.reply_photo2}}&quot; width=200&amp;gt;
 {{/if}}

 &amp;lt;br&amp;gt;
 {{$num2.created_at}}
 &amp;lt;/div&amp;gt;
   {{/if}}
  {{/foreach}}
{{/foreach}}
&lt;/pre&gt;&lt;br /&gt;
3時間目&lt;br /&gt;
残りも片付けるよー。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
if文を使わない方式。&lt;b&gt;こっちのほうがデータ処理が早い。&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
4次元配列&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//SELECT文を発行し、commentテーブルからレコードを取得
$sql = &quot;SELECT * FROM comment WHERE delete_flag = 0 ORDER BY created_at DESC&quot;;
$result = mysql_query($sql);

while ($comment = mysql_fetch_array($result)) {
 $row = array();
 //配列変数$rowの要素[comment]に配列$commnetが入るので、この時点で$rowは二次元配列
 $row[&#39;comment&#39;] = $comment;
    //SELECT文を発行し、replyテーブルからレコードを取得
    $sql = &quot;SELECT * FROM reply WHERE delete_flag = 0 AND comment_id = 
&#39;&quot;.$comment[&quot;id&quot;].&quot;&#39;ORDER BY created_at DESC&quot;;
    $result1 = mysql_query($sql);

    if($result1) {
        while ($reply = mysql_fetch_array($result1)) {
         //配列変数$rowの要素[reply]の下にもう一つ配列を作り、
         そこに配列$replyが入るので、この時点で$rowは3次元配列
            $row[&#39;reply&#39;][] = $reply;
        }
    }
 //配列変数$rowsに3次元配列$rowを格納するので、$rowsは4次元配列
    $rows[] = $row;
}

# 多重配列の表示確認
/*
print&quot;&amp;lt;pre&amp;gt;&quot;;
print_r($rows);
print&quot;&amp;lt;/pre&amp;gt;&quot;;
*/

$smarty = new Smarty;
$smarty-&amp;gt;assign(&#39;rows&#39;, $rows);
$smarty-&amp;gt;display(&#39;index.tpl&#39;);
&lt;/pre&gt;&lt;br /&gt;
index3.は3次元だそうな。&lt;br /&gt;
デザイナーの負担にならないように構築することで、Smarty本来の機能を発揮できる。&lt;br /&gt;
&lt;br /&gt;
階層イメージ&lt;br /&gt;
$rows━━&lt;br /&gt;
　　　　┗$row&lt;br /&gt;
　　　　　　┣comment&lt;br /&gt;
　　　　　　┣reply━&lt;br /&gt;
　　　　　　　　　　┣０&lt;br /&gt;
　　　　　　　　　　┣１&lt;br /&gt;
$smarty.session.～でsession使えるよ。&lt;br /&gt;
&lt;br /&gt;
マジでくわっちょおわり～。&lt;br /&gt;
&lt;br /&gt;
&quot; ﾟ☆,｡･:*:･ﾟ★o(´▽｀*)/♪Thanks♪＼(*´▽｀)oﾟ★,｡･:*:･☆ﾟ &quot;&lt;br /&gt;
&quot; ﾟ☆,｡･:*:･ﾟ★o(´▽｀*)/♪Thanks♪＼(*´▽｀)oﾟ★,｡･:*:･☆ﾟ &quot;&lt;br /&gt;
&quot; ﾟ☆,｡･:*:･ﾟ★o(´▽｀*)/♪Thanks♪＼(*´▽｀)oﾟ★,｡･:*:･☆ﾟ &quot;</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/3394741855497746213/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/37.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3394741855497746213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3394741855497746213'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/37.html' title='3/7覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-3552863944277138699</id><published>2011-03-04T17:58:00.000+09:00</published><updated>2011-03-04T17:58:29.171+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smarty"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/4覚書</title><content type='html'>1時間目&lt;br /&gt;
FizzBuzz～&lt;br /&gt;
display忘れてたさ･･････＿|￣|○&lt;br /&gt;
fizzbuzz.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;for ($i = 1; $i &amp;lt; 101; $i++) {
 $num_list[$i] = $i;
}
require( &quot;./libs/Smarty.class.php&quot; );
$smarty = new Smarty();
$smarty -&amp;gt; assign( &quot;num_list&quot;, $num_list );
$smarty -&amp;gt; display(&quot;fizzbuzz.tpl&quot;);
&lt;/pre&gt;&lt;br /&gt;
fizzbuzz.tpl&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html&quot;; charset=&quot;UTF-8&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;table border=1&amp;gt;
&amp;lt;caption&amp;gt;FizzBuzz。3の倍数はFizz。5の倍数はBuzz。公倍数はFizzBuzz&amp;lt;/caption&amp;gt;
 &amp;lt;tr&amp;gt;
 {foreach from = $num_list item = num}
 &amp;lt;td&amp;gt;
 {if $num is div by 3}Fizz{/if}
 {if $num is div by 5}Buzz{/if}
 {if (($num is not div by 3) &amp;&amp; ($num is not div by 5))}{$num}
&amp;lt;/td&amp;gt;
{/if}
&amp;lt;/tr&amp;gt;
{/foreach}
&amp;lt;/table&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
2時間目&lt;br /&gt;
FizzBuzz続き～&lt;br /&gt;
出るには出たんだけど、trタグの位置がわからんかった｡゜（ﾟ´Д｀ﾟ)゜｡&lt;br /&gt;
九九で多少は理解できるのかなあ･･････。&lt;br /&gt;
プログラムは上から順に処理するが、Smartyでは上から順に処理される。&lt;br /&gt;
elseifを使うときはphpとは逆に記述しよう。&lt;br /&gt;
&lt;br /&gt;
分離の意義。&lt;br /&gt;
HTML（tpl）とPHPの作業でどのようになってくるか。を理解するため。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
メモリ増設。私のはLatitude：D520。celeron Mゆえに最大2GBまでしか効かない。&lt;br /&gt;
しかもキーボードカバー外してからDIMM Aスロットがありやんの･･･&lt;br /&gt;
いいんちょに外し方てもらいつつやりかたを教わり、しのさんのやってみた。できた。&lt;br /&gt;
&lt;a href=&quot;http://supportapj.dell.com/support/edocs/systems/latd520/ja/ug_ja/parts.htm#wp1052375&quot;&gt;外し方はメーカーサイト&lt;/a&gt;参照。&lt;br /&gt;
&lt;br /&gt;
4時間目～ラスト&lt;br /&gt;
&lt;br /&gt;
BBSをBBS_Smartyにコピーして分離作業＋メモリ増設続き。&lt;br /&gt;
&lt;br /&gt;
投稿分だけはでましたが･･････返信難しいよおおお＞＜&lt;br /&gt;
&lt;br /&gt;
理解がないのが悔しい。&lt;br /&gt;
明日釣りだけど考えます。ちっくしょー。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/3552863944277138699/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/34.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3552863944277138699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3552863944277138699'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/34.html' title='3/4覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-7339305449392090556</id><published>2011-03-03T17:37:00.000+09:00</published><updated>2011-03-03T17:37:23.285+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smarty"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/3覚書</title><content type='html'>ちょいと遅刻して午後から。自分のドジっぷりがなんだかなあ；&lt;br /&gt;
&lt;br /&gt;
1時間目？&lt;br /&gt;
現場レベルでのSmartyのデリミタの扱いについて。&lt;br /&gt;
｛｝はJavaScriptでも使うので、Smartyと混在するとエラーの原因になるので、&lt;br /&gt;
回避のためにデリミタを変更したclassを継承させる。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/**********************************************************************

Smartyクラスを継承したMySmartyクラスを作成

コンストラクタの呼び出しが「Smarty()」ではなくて「__construct()」に
変わっているので注意

**********************************************************************/

include_once ( &quot;Smarty.class.php&quot; );

class MySmarty extends Smarty {
 function MySmarty() {
  $this -&amp;gt; left_delimiter = &quot;{{&quot;;
  $this -&amp;gt; right_delimiter = &quot;}}&quot;;
  $this -&amp;gt; __construct();
 }
}
&lt;/pre&gt;&lt;br /&gt;
2時間目？&lt;br /&gt;
&lt;br /&gt;
Ex.SmartyでFizzBuzz。ifとforeachでつくろ～（宿題らしい）。&lt;br /&gt;
ファイル名はまんまfizzbuzz.phpとfizzbuzz.tpl。&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
&lt;br /&gt;
暗号化&lt;br /&gt;
md5()で暗号化処理の関数です。覚えておくとラッキー。&lt;br /&gt;
&lt;br /&gt;
mysql_fetch_array ＝ 通常配列＋連想配列&lt;br /&gt;
楽だがデータ取得が2倍になるので多用は難しい。&lt;br /&gt;
mysql_fetch_assoc ＝ 連想配列&lt;br /&gt;
&lt;br /&gt;
mysql_fetch_row ＝ 通常配列&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ブラウザで出すとこうなる。エクセルの表をイメージするとわかりやすいかな。&lt;br /&gt;
Array//$dataの配列&lt;br /&gt;
(&lt;br /&gt;
    [0] =&gt; Array//$rowの1行目の配列&lt;br /&gt;
        (&lt;br /&gt;
    [1] =&gt; Array//$rowの2行目の配列&lt;br /&gt;
        (&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
連想配列を表で出してみよう。&lt;br /&gt;
foreachelse　･･････データが入っていない場合の判定を入れることでエラー表示回避。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;body&amp;gt;
&amp;lt;table border=&quot;1&quot;&amp;gt;
 &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;No.&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;会員ID&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;パスワード&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;有効／無効&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
 {{foreach from = $member_list item = num}}
 &amp;lt;tr&amp;gt;
  &amp;lt;td&amp;gt;{{$num.member_id}}&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;{{$num.member_name}}&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;{{$num.password}}&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;{{if $num.delete_flg == 0}}有効{{/if}}
  {{if $num.delete_flg == 1}}無効{{/if}}&amp;lt;/td&amp;gt;//elseifもおｋ
 &amp;lt;/tr&amp;gt;
 {{foreachelse}}
 &amp;lt;tr&amp;gt;&amp;lt;td colspan=&quot;4&quot;&amp;gt;データがありません&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
 {{/foreach}}
&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
5時間目&lt;br /&gt;
4時間目の内容で、POSTされたデータを扱う。&lt;br /&gt;
何がきても大丈夫なように|escape（）を使うことでXSS対策になる。&lt;br /&gt;
「escape」は「htmlspcialchars」のこと～。&lt;br /&gt;
あとindex.tplから。&lt;br /&gt;
$blog.blog_date|date_format:&#39;%Y年 %m月 %d日 %T&#39;&lt;br /&gt;
でデータの日付表示を変更できるよ。&lt;br /&gt;
関数を使うときは｜でつなげるよ。&lt;br /&gt;
&lt;br /&gt;
【問題】0302問題&lt;br /&gt;
以下のログインフォームをMとVに分離してください&lt;br /&gt;
・login.php&lt;br /&gt;
・login.tpl&lt;br /&gt;
&lt;br /&gt;
テンプレートファイルに&lt;br /&gt;
・ログインネーム（$login_name）と&lt;br /&gt;
・ログインメッセージ（$login_message）&lt;br /&gt;
を表示させてください&lt;br /&gt;
&lt;br /&gt;
多分pho側にSmarty設定を入れるのは平気だと思う。&lt;br /&gt;
{{$login_name}}と{{$login_message}}だけ～（設定次第なので｛｝のひとつでもおｋ）</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/7339305449392090556/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/33.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7339305449392090556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/7339305449392090556'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/33.html' title='3/3覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-3659388657055983023</id><published>2011-03-02T16:48:00.000+09:00</published><updated>2011-03-02T16:48:33.897+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smarty"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/2覚書</title><content type='html'>1時間目&lt;br /&gt;
今後の進捗についての説明。&lt;br /&gt;
&lt;br /&gt;
バーチャルホストのリカバー(;´д｀)ﾄﾎﾎ…&lt;br /&gt;
今までのlocalhostからsmarty_sampleって場所に変更したよ。&lt;br /&gt;
そもそもバーチャルホストって何？&lt;br /&gt;
ひとつのIPアドレスに擬似的に複数のドメインをかぶせることができる。&lt;br /&gt;
複数のweb（localhostとかsmarty_sample）をPC内でいくつも使えるようにするのだー。&lt;br /&gt;
&lt;br /&gt;
だが、ここで落とし穴。&lt;br /&gt;
Windows内でバーチャルホストを複数設置すると挙動が怪しくなる。&lt;br /&gt;
VM入れてLinuxで設定しよう。&lt;br /&gt;
ってなことで。&lt;br /&gt;
&lt;b&gt;封　印（#でコメントアウト）&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
あとこぼれ話。&lt;br /&gt;
設定ファイルを書き換えるときは必ずバックアップを取ろう。&lt;br /&gt;
書き換える前のファイルを名前をつけて保存でBAK_とかつけて別名保存するだけ！&lt;br /&gt;
&lt;br /&gt;
コレだけでトラブルのときにすぐ復旧できるよ！&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
とりあえずプログラムってなに？　PHPってなに？&lt;br /&gt;
資料みれ。すっごいわかりやすいから。&lt;br /&gt;
・JavaScriptでバリデート（エラーチェック。）&lt;br /&gt;
　ブラウザだけで処理するからサーバー負荷がない。&lt;br /&gt;
　でもJavaScriptはオフにできる。&lt;br /&gt;
　→実務ではJavaScript＋PHP両方のバリデートを行う。&lt;br /&gt;
&lt;br /&gt;
・Noticeエラーもっかい&lt;br /&gt;
　Smarty_sampleにnotice_test.php作成。&lt;br /&gt;
　以下入力。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$num = $num1 + $num2;
print $num;
$text = $_POST[&quot;text&quot;];
print $text;
&lt;/pre&gt;　&lt;br /&gt;
　んでphp.iniの&lt;br /&gt;
error_reporting = E_ALL &amp; ~E_NOTICE &amp; ~E_DEPRECATEDを&lt;br /&gt;
error_reporting = E_ALL&lt;br /&gt;
; &amp; ~E_NOTICE &amp; ~E_DEPRECATED&lt;br /&gt;
　に変更。;にするとコメントアウトする。&lt;br /&gt;
　Apache再起動。&lt;br /&gt;
&lt;br /&gt;
すると、&lt;b&gt;Notice: Undefined variable:～で　&lt;br /&gt;
num1、num2、textそれぞれに対してNoticeエラーが出る。&lt;br /&gt;
コレはプログラムゆえに、変数の指定がないぜ～って言ってる。&lt;/b&gt;ここでは。&lt;br /&gt;
おとといも書いたけど、これが残っていると、どこに設定ファイルがあるのかモロバレ。&lt;br /&gt;
ハッキング等を受ける可能性があるのだ。&lt;br /&gt;
なのでちゃんと決めてあげないといけない。&lt;br /&gt;
&lt;br /&gt;
んじゃどうするのか？　自分もわからんのでしっかり勉強。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$num1 = 0 ;//変数の指定
$num2 = 0 ;//変数の指定

$num = $num1 + $num2;
print $num;

$_POST[&quot;text&quot;] = NULL;//変数の指定

$text = $_POST[&quot;text&quot;];
print $text;
&lt;/pre&gt;&lt;br /&gt;
POST、GET、SESSION、連想配列でNoticeエラーが出ているときは、&lt;br /&gt;
変数の前に@をつけておくと回避ができる。&lt;br /&gt;
@$numとか。$text = @$_POST[&quot;text&quot;]とか。&lt;br /&gt;
現場レベルで一般的だが、会社の方針に従おう。&lt;br /&gt;
&lt;br /&gt;
ちなみにeclipceでは変数の指定がちゃんとできているとファイルの下にツリーが出る。&lt;br /&gt;
赤枠のところ。出ていない場合はNoticeエラーの疑い強し。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg191xp5p6oEnjua-cmt2MyL2_zoo0mnZx2EGG_o7vLYg8MzqD1UBGmt9YvX93egg0WjGhQUA12U0ue43xf5qOR7EVDtTxOlcFPftVNAvxh3423_WMWFb8O3QmcAQ-SWHVR_cYrWadTCHLq/s1600/notice01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;248&quot; width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg191xp5p6oEnjua-cmt2MyL2_zoo0mnZx2EGG_o7vLYg8MzqD1UBGmt9YvX93egg0WjGhQUA12U0ue43xf5qOR7EVDtTxOlcFPftVNAvxh3423_WMWFb8O3QmcAQ-SWHVR_cYrWadTCHLq/s512/notice01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
・公開領域再び&lt;br /&gt;
　ブラウザに設定ファイルは置きません。&lt;br /&gt;
　階層上げておかないと攻撃されちゃうよ;y=ｰ( ﾟдﾟ)･∵. ﾀｰﾝ&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
テンプレートエンジンてなに？&lt;br /&gt;
めっちゃ簡潔に言うとclass（変数と定数と関数）ファイルの集合体。&lt;br /&gt;
smartyは変数をアサインするときは$不要。&lt;br /&gt;
$smarty-&gt;assign(‘title’, ‘Smarty-test’); //「Smarty-test」という文字列を、テンプレート&lt;br /&gt;
側で「$title」と書けば使用できるようにする&lt;br /&gt;
表示させるときは{$title}&lt;br /&gt;
Smartyがやってることを簡単に言うと・・・&lt;br /&gt;
PHPファイル（****.php  =  Model）で&lt;br /&gt;
assignした変数を&lt;br /&gt;
displayで指定したテンプレートファイル(****.tpl  =  View)で&lt;br /&gt;
使用できるようにする&lt;br /&gt;
（＝assign変数をテンプレートファイルに渡す）&lt;br /&gt;
＋α(ifやforeachの使用も可)&lt;br /&gt;
&lt;br /&gt;
講座の中ではテンプレート群の記述は不要。デフォルトで設定済み。&lt;br /&gt;
（だからWEB講座にも記述がない）&lt;br /&gt;
テンプレート群は実務ではプロジェクトと同じ階層に置くため、記述が必要になる。&lt;br /&gt;
&lt;br /&gt;
■eclipseのPHP内のHTML構文エラー非表示設定&lt;br /&gt;
設定 → 一般 → エディタ → 構造化テキストエディタ → 検証（青字リンク） → &lt;br /&gt;
HTML構文バリデータ、HTML構文バリデータ（PHPファイル用）のチェックを2つとも外す。&lt;br /&gt;
&lt;br /&gt;
4時間目&lt;br /&gt;
ダウンロードしたsmarty_lessonをeclipceにインポート。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;練習問題
1.配列
$gender = array ( &quot;m&quot; =&amp;gt; &quot;男&quot;, &quot;f&quot; =&amp;gt; &quot;女&quot; ) ;
これをSmartyで表示するときは、
{$gender.m}と書く。
2.if文
genderの値が「f」だったら「女」と表示するロジックを追加してください
それ以外は「未選択」と表示するロジックを追加してください
$gender = &quot;f&quot; ;
■性別：
{if $gender == &quot;m&quot;}
男
{elseif $gender == &quot;f&quot;}
女
{else}
未選択
{/if}

3.foreach文　生phpでもいいような希ガス。んでも覚えておくのだ。
$pref[1] = &quot;北海道&quot; ;
$pref[2] = &quot;青森県&quot; ;
$pref[3] = &quot;岩手県&quot; ;

■住所：
&amp;lt;select name = &quot;pref&quot;&amp;gt;
 &amp;lt;option value = &quot;&quot; selected&amp;gt;選択してください&amp;lt;/option&amp;gt;
 {foreach from = $pref item = pref_name key = num}
 &amp;lt;option value = &quot;{$num}&quot;&amp;gt;{$pref_name}&amp;lt;/option&amp;gt;
 {/foreach}
&amp;lt;/select&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
{}（デリミタ、ブレス）の直後と直前に余計な半角スペースがあると正常に動作しない。&lt;br /&gt;
&lt;br /&gt;
4.foreach＋if文&lt;br /&gt;
【問題】&lt;br /&gt;
年、月、日をプルダウンで選択できるように表示してください&lt;br /&gt;
→foreachを使用する&lt;br /&gt;
→まず年を作成する&lt;br /&gt;
→うまくいったら同じ要領で月と日も作る&lt;br /&gt;
&lt;br /&gt;
【発展問題】&lt;br /&gt;
→現在の日付とループの日付が一致したらデフォルト選択という条件式をつける&lt;br /&gt;
if文中にはPHPの関数を使うことができる&lt;br /&gt;
・今回は関数「date()」を使用する&lt;br /&gt;
→現在の年を求めるには…date(&quot;Y&quot;)&lt;br /&gt;
→現在の月を求めるには…date(&quot;m&quot;)&lt;br /&gt;
→現在の日を求めるには…date(&quot;d&quot;)&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;date.php
//年の配列を生成
for ( $i = 2000; $i &amp;lt;= date(&quot;Y&quot;)+3; $i ++ ){//2000年～2014年まで
 $year_list[$i] = $i;
}
//月の配列を生成
for($j = 1; $j &amp;lt;= 12; $j ++){//12月
 $month_list[$j] = $j;
}
//日の配列を生成
for($k = 1; $k &amp;lt;= 31; $k ++){//31日まで
 $day_list[$k] = $k;
}

date.tpl

&amp;lt;form action=&quot;&quot;&amp;gt;
&amp;lt;select name = &quot;year&quot;&amp;gt;
 {foreach from = $year_list item = year}
 &amp;lt;option value = &quot;{$year}&quot;{if date(&quot;Y&quot;) == $year} selected{/if}&amp;gt;{$year}&amp;lt;/option&amp;gt;
 {/foreach}

&amp;lt;/select&amp;gt;年
&amp;lt;select name = &quot;month&quot;&amp;gt;
 &amp;lt;option value = &quot;&quot; selected&amp;gt;選択してください&amp;lt;/option&amp;gt;
 {foreach from = $month_list item = month}
 &amp;lt;option value = &quot;{$month}&quot;{if date(&quot;m&quot;) == $month} selected{/if}&amp;gt;{$month}&amp;lt;/option&amp;gt;
 {/foreach}
&amp;lt;/select&amp;gt;月
&amp;lt;select name = &quot;day&quot;&amp;gt;
 &amp;lt;option value = &quot;&quot; selected&amp;gt;選択してください&amp;lt;/option&amp;gt;
 {foreach from = $day_list item = day}
 &amp;lt;option value = &quot;{$day}&quot;{if date(&quot;d&quot;) == $day} selected{/if}&amp;gt;{$day}&amp;lt;/option&amp;gt;
 {/foreach}
&amp;lt;/select&amp;gt;日
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
閉じ｝のないphp文の記述を理解していなかった･･････。&lt;br /&gt;
いいんちょの言葉が頭の中でリプレイする。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/3659388657055983023/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/32.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3659388657055983023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/3659388657055983023'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/32.html' title='3/2覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg191xp5p6oEnjua-cmt2MyL2_zoo0mnZx2EGG_o7vLYg8MzqD1UBGmt9YvX93egg0WjGhQUA12U0ue43xf5qOR7EVDtTxOlcFPftVNAvxh3423_WMWFb8O3QmcAQ-SWHVR_cYrWadTCHLq/s72-c/notice01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-2093321742442015922</id><published>2011-03-01T16:42:00.001+09:00</published><updated>2011-03-02T10:19:03.800+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smarty"/><category scheme="http://www.blogger.com/atom/ns#" term="オブジェクト指向"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>3/1覚書</title><content type='html'>1時間目は&lt;br /&gt;
クラスの概念再び。&lt;br /&gt;
クラス図。これは概念だからね。&lt;br /&gt;
親から子へ継承できるよ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiR8JOVA6_6PVKNd-i2hoO28tE1pcOOojArwWCWysUjQCBQvB-720Ww8tAbY3yuTEO6Jol6SLLJO8HXdX6XbpuSD0QSIY1t354uekBcQSPcRNfZwqVYpvPTe1YI68k0bl6dh4K54OyFk2x/s1600/class01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiR8JOVA6_6PVKNd-i2hoO28tE1pcOOojArwWCWysUjQCBQvB-720Ww8tAbY3yuTEO6Jol6SLLJO8HXdX6XbpuSD0QSIY1t354uekBcQSPcRNfZwqVYpvPTe1YI68k0bl6dh4K54OyFk2x/s400/class01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
☆オブジェクト指向&lt;br /&gt;
&lt;a href=&quot;http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/&quot;&gt;オブジェクト指向の考え方で割りといい感じの説明&lt;/a&gt;&lt;br /&gt;
ここだけ読んでもおｋ。&lt;br /&gt;
&lt;br /&gt;
飛び飛び過ぎてつらい･･････。&lt;br /&gt;
&lt;br /&gt;
2時間目&lt;br /&gt;
smarty入門っぽいサイト&lt;br /&gt;
&lt;a href=&quot;http://d.hatena.ne.jp/tek_koc/20100423/1272010917&quot;&gt;早わかりsmarty&lt;/a&gt;&lt;br /&gt;
いずれは見よう&lt;a href=&quot;http://labs.unoh.net/&quot;&gt;ウノウラボ&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://ml.php.gr.jp/mailman/listinfo/php-users&quot;&gt;PHP-users メーリングリスト&lt;/a&gt;&lt;br /&gt;
不明点もちゃんと書けば教えてくれるよ。質問内容は質問者の文章を参考にどぞ。&lt;br /&gt;
&lt;br /&gt;
いつかは行こう&lt;a href=&quot;http://events.php.gr.jp/events/show/16&quot;&gt;PHP勉強会&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
さてSmarty設置とバーチャルホスト設定。&lt;br /&gt;
eclipce、XAMPP起動して･･････sample_templateって名前でプロジェクト作成。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.smarty.net/download&quot;&gt;ダウンロード&lt;/a&gt;したLatest Stable Releaseの&lt;br /&gt;
Smarty 3.0.7 (.tar.gz) (.zip) February 11th, 2011のzipを保存して解凍。&lt;br /&gt;
そこからlibsフォルダをC:\pleiades\xampp\htdocs\smarty_sample（実際のフォルダね）へコピー。&lt;br /&gt;
&lt;br /&gt;
C:\pleiades\xampp\apache\conf\extra\httpd-vhosts.confをエディタで開く。&lt;br /&gt;
そんで一番下の所をコピーしてその下に貼り付けて、以下に改変。&lt;br /&gt;
一緒に##NameVirtualHost *:80ってあるから、##取るよ！&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;## Smartyサンプル##
&amp;lt;VirtualHost *:80&amp;gt;
    DocumentRoot &quot;c:/pleiades/xampp/htdocs/smarty_sample&quot;
    ServerName smarty_sample
    Directoryindex index.php index.html
    
    &amp;lt;Directory &quot;c:/pleiades/xampp/htdocs/smarty_sample&quot;&amp;gt;
        AllowOverride All
        Allow from All
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;保存したらXAMPPでApache再起動。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3時間目&lt;br /&gt;
C:\WINDOWS\system32\drivers\etc\hostsをエディタで開き、最下部に下記追加。&lt;br /&gt;
## Smarty サンプル&lt;br /&gt;
127.0.0.1        smarty_sample&lt;br /&gt;
http://smarty_sample/で開くかチェック。&lt;br /&gt;
現時点ではIndex of /ってページが出れば成功。&lt;br /&gt;
意味を知ろう&lt;br /&gt;
&lt;a href=&quot;http://e-words.jp/w/1272E02E02E1.html&quot;&gt;127.0.0.1 【ループバックアドレス】&lt;/a&gt;&lt;br /&gt;
127.0.0.1　自分のlocalhostのこと。&lt;br /&gt;
&lt;a href=&quot;http://e-words.jp/w/hostsE38395E382A1E382A4E383AB.html&quot;&gt;hostsファイル 【hosts file】&lt;/a&gt;&lt;br /&gt;
localhostのIPアドレスやホスト名が記述されたシステムファイル。&lt;br /&gt;
&lt;a href=&quot;http://e-words.jp/w/E5908DE5898DE8A7A3E6B1BA.html&quot;&gt;名前解決 【name resolution】&lt;/a&gt;&lt;br /&gt;
DNSのこと。&lt;br /&gt;
&lt;br /&gt;
今までのBBSとか住所録もバーチャルホストに組み込んでみよう。&lt;br /&gt;
&lt;b&gt;ていうかこれやらないと今までの課題が見れなくなる；&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;
    DocumentRoot &quot;c:/pleiades/xampp/htdocs/address_book&quot;
    ServerName address_book
&lt;/pre&gt;&lt;br /&gt;
4時間目&lt;br /&gt;
&lt;br /&gt;
テンプレートからHTMLを呼び出すよ。&lt;br /&gt;
まずは以下のフォルダを作るよー。&lt;br /&gt;
templatesフォルダの名称は好きにつけていいけど、慣例でコレが多い。&lt;br /&gt;
たまにtplって省略できる。&lt;br /&gt;
これらのフォルダは攻撃対象になりうるため、本当は公開領域に置かない。&lt;br /&gt;
置くならhtdocs以上のフォルダに置く。&lt;br /&gt;
* templates&lt;br /&gt;
* templates_c&lt;br /&gt;
* config&lt;br /&gt;
* cache&lt;br /&gt;
&lt;br /&gt;
んでtemlpatesフォルダにhello.tplファイルを作成。&lt;br /&gt;
smaty_sample直下にhello.phpを作成。&lt;br /&gt;
内容は以下。&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//sumarty.classを読み込み
require(&#39;./libs/Smarty.class.php&#39;);

//smartyクラスのインスタンスを作成
$smarty = new Smarty;

//テンプレートファイルの置き場所を指定
$smarty -&amp;gt;template_dir=&quot;./templetes&quot;;

//変換したテンプレートファイルが置かれる場所
//コンパイル・ディレクトリ
//実際に実行されるphpファイル
$smarty -&amp;gt;compile_dir=&quot;./templetes_c&quot;;

//assignで変数名と値をセット
$smarty -&amp;gt;assign(&quot;name&quot;,&quot;world&quot;);
//displayでブラウザに出力
$smarty -&amp;gt;display(&quot;hello.tpl&quot;);

&lt;/pre&gt;&lt;br /&gt;
そしたらhttp://smarty_sample/hello.phpを開くと、&lt;br /&gt;
Hello,world! って文字だけ出るよ。&lt;br /&gt;
&lt;br /&gt;
サーバーサイドスクリプト/クライアントサイドスクリプト&lt;br /&gt;
呼んで字のごとく。&lt;br /&gt;
&lt;br /&gt;
コンパイルって何？&lt;br /&gt;
ヒトが書いたプログラムを機械がわかる言葉01 00 10･･････などに翻訳してあげること。&lt;br /&gt;
&lt;br /&gt;
5時間目&lt;br /&gt;
tpl内に{* *}でコメントがかける。ソースにも出ない。&lt;br /&gt;
&lt;br /&gt;
配列でやてみよう。&lt;br /&gt;
array.php&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//sumarty.classを読み込み
require(&#39;./libs/Smarty.class.php&#39;);

//smartyクラスのインスタンスを作成
$smarty = new Smarty;

//テンプレートファイルの置き場所を指定
$smarty -&amp;gt;template_dir=&quot;./templetes&quot;;

//変換したテンプレートファイルが置かれる場所
//コンパイル・ディレクトリ
//実際に実行されるphpファイル
$smarty -&amp;gt;compile_dir=&quot;./templetes_c&quot;;

$smarty -&amp;gt;assign(&quot;arch&quot;,
    array(
    &quot;PHP&quot;,
    &quot;ASP.NET&quot;,
     array(&quot;JSP&quot;,&quot;サーブレット&quot;)
     )
   );
$smarty -&amp;gt; display(&quot;array.tpl&quot;);

&lt;/pre&gt;array.tpl&lt;br /&gt;
サーバーサイド技術には{$arch[0]}、{$arch[1]}、のような技術があります。&lt;br /&gt;
連想配列の入れ子の表示方法がわからんかった･･････；</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/2093321742442015922/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/03/31.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/2093321742442015922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/2093321742442015922'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/03/31.html' title='3/1覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiR8JOVA6_6PVKNd-i2hoO28tE1pcOOojArwWCWysUjQCBQvB-720Ww8tAbY3yuTEO6Jol6SLLJO8HXdX6XbpuSD0QSIY1t354uekBcQSPcRNfZwqVYpvPTe1YI68k0bl6dh4K54OyFk2x/s72-c/class01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5799067538558710430.post-125570760028325416</id><published>2011-02-28T17:24:00.001+09:00</published><updated>2011-03-01T10:41:24.714+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="クラス"/><category scheme="http://www.blogger.com/atom/ns#" term="講座"/><title type='text'>2/28覚書</title><content type='html'>1時間目&lt;br /&gt;
☆クラス復習。&lt;br /&gt;
&lt;br /&gt;
クラスの内容と実行ファイルを分けましょう。&lt;br /&gt;
includeさせるほうが一般的だし管理も楽。&lt;br /&gt;
&lt;br /&gt;
ファイル名はHuman classなら、最初を大文字にして&lt;b&gt;Human.class.php&lt;/b&gt;となる。&lt;br /&gt;
&lt;br /&gt;
set_ini関数&lt;br /&gt;
ini_set() &lt;br /&gt;
レンタルサーバーで直接php.iniを触れないときに利用する。&lt;br /&gt;
いいんちょ曰く、この説明はいっちーが話していたそうな。&lt;br /&gt;
すまん覚えてない。&lt;br /&gt;
&lt;br /&gt;
Notice: Undefinedとは、&lt;br /&gt;
未定義変数の場合の警告。エラーではないがあるとよろしくない。&lt;br /&gt;
デバッグ時にphp.iniの&lt;br /&gt;
error_reporting = E_ALL &amp;amp; ~E_NOTICE &amp;amp; ~E_DEPRECATEDを&lt;br /&gt;
error_reporting = E_ALL&lt;br /&gt;
; &amp;amp; ~E_NOTICE &amp;amp; ~E_DEPRECATED&lt;br /&gt;
に変更。;にするとコメントアウトする。&lt;br /&gt;
&lt;br /&gt;
よろしくない理由はエラーが残っているとHTML以外のデータファイルの場所がわかり、&lt;br /&gt;
ハッキングなどの攻撃を受ける恐れがあり、防ぐための対処である。&lt;br /&gt;
&lt;br /&gt;
授業の疑問。べたな書き方言うけどそこから勉強するんじゃねえの？&lt;br /&gt;
&lt;br /&gt;
クラス継承&lt;br /&gt;
extendsというコードで継承させる。&lt;br /&gt;
&lt;br /&gt;
目覚まし時計の行動を例に。&lt;br /&gt;
Tokei.class.php&lt;br /&gt;
MezamashiTokei.class.php&lt;br /&gt;
call_mezamashi_class.php&lt;br /&gt;
&lt;br /&gt;
上記ファイル名で3つ作成。&lt;br /&gt;
call_mezamashi_class.phpをブラウザで出してみよう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Tokei.class.php

&amp;lt;?php
class Tokei {
 function getTime(){
  return date(&#39;H:i:s&#39;);
 }
}
?&amp;gt;

MezamashiTokei.class.php

&amp;lt;?php
require_once(&#39;./class/Tokei.class.php&#39;);

class MezamashiTokei extends Tokei {

 function getTime(){
  return date(&#39;H時i分です&#39;);
 }

 function getBell(){
  return &quot;リンリンリン！&quot;;
 }

}
?&amp;gt;

call_mezamashi_class.php

&amp;lt;?php
require_once(&#39;./class/MezamashiTokei.class.php&#39;);

$mezamashi = new MezamashiTokei();
print $mezamashi-&amp;gt;getTime().&quot;&amp;lt;br&amp;gt;&quot;;
print $mezamashi-&amp;gt;getBell();

?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Tokei.class.phpのgetTime()が、&lt;br /&gt;
MezamashiTokei.class.phpのgetTime()に上書きされている。&lt;br /&gt;
実際にMezamashiTokei.class.phpの下記部分を/*～*/で囲うとわかるよ。&lt;br /&gt;
function getTime(){&lt;br /&gt;
return date(&#39;H時i分です&#39;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
関数の上書きをオーバーライブというそうな。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;privateとpublic&lt;/b&gt;&lt;br /&gt;
アクセス件の一種。何も書かなければpublicとして扱われる。&lt;br /&gt;
&lt;div style=&quot;color: red;&quot;&gt;&lt;b&gt;※基本Functionの前にprivate置くことはありません。class内の宣言とは違います。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href=&quot;http://ivystar.jp/programming/php/privatecprotectedcpublicia/&quot;&gt;ここ&lt;/a&gt;から引用。&lt;br /&gt;
ＰＨＰ5のアクセス制御にprivate、protected、publicがあります。&lt;br /&gt;
それぞれの違いを明記しておきます。&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr align=&quot;left&quot;&gt; &lt;td&gt;&lt;b&gt;private&lt;/b&gt;&lt;/td&gt; &lt;td&gt;そのクラスからしかアクセスできない&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;left&quot;&gt; &lt;td&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/td&gt; &lt;td&gt;そのクラスと、サブクラスからしかアクセスできない&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;left&quot;&gt; &lt;td&gt;&lt;b&gt;public&lt;/b&gt;&lt;/td&gt; &lt;td&gt;どこからでもアクセスできる&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;
ごめん。privateとpublicをつけてやるの聞いてなかった。&lt;br /&gt;
あれはアクセス権を理解するための処理にしかすぎない、と思ってしまいますた。&lt;br /&gt;
つうか同時に存在するクラスってその時点でクラス分けるべきだとおもうのだ。&lt;br /&gt;
&lt;br /&gt;
Javaでの参考情報。&lt;a href=&quot;http://www.tohoho-web.com/java/modifier.htm&quot;&gt;とほほのWWW入門から修飾子&lt;/a&gt;&lt;br /&gt;
ていうかクラス図ってまたJavaですか。&lt;br /&gt;
UMLの概念を常に持ってほしいってことですね。&lt;br /&gt;
自分も忘れかけてたので再度紹介。&lt;br /&gt;
&lt;a href=&quot;http://astah.change-vision.com/ja/product/astah-community.html&quot;&gt;astah* community&lt;/a&gt;無償のUMLモデリングツール。せっきー紹介。&lt;br /&gt;
まあ、初日ですから。</content><link rel='replies' type='application/atom+xml' href='http://sari1225.blogspot.com/feeds/125570760028325416/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://sari1225.blogspot.com/2011/02/228.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/125570760028325416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5799067538558710430/posts/default/125570760028325416'/><link rel='alternate' type='text/html' href='http://sari1225.blogspot.com/2011/02/228.html' title='2/28覚書'/><author><name>山崎サリー</name><uri>http://www.blogger.com/profile/00054710998838078548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMFAX6tFT6SljJS8GI2zHwt_41U8cZrGgfLHrJ5K_B6EX7yn8MDPjKAEC5kME1JjVeQFs9JRUT-R7OQm_iIN4lRQPhVYJ3j5V3mhIV6CCoP0WZ1uc3Hb1Ve-klG8C0g/s220/imagesmo01.jpeg'/></author><thr:total>0</thr:total></entry></feed>