2011/04/04

symfonyで掲示板作成、部品化

php講習 4/4

・今日は天気が良いためか、花粉症がかなり悪化、きつい。

1時間目
・ヘルパーと返信が終わっている人は、アンケートの入力処理を作成
・アンケート項目(enquete_add)
名前、性別、興味のあること(居、食、住)、コメント、画像3件

・アンケートの実装作業
  モジュール作成
  テーブル作成
  モデル化

  設定作成(性別、興味)
  /config/setting.yml
    gender:
      ## 性別リスト:
      1: 男性
      2: 女性
    interest:
      ## 興味リスト:
      1: 居
      2: 食
      3: 住
      9: 他
ymlファイル作成では、入力時のスペースの数に注意して下さい。

・アクション作成
  input,  confirm,  result
・テンプレート作成
  inputSuccess.phpに入力フォーム(ヘルパー使用)
  confirmSuccess.php確認、結果


3時間目
・ルーティング
URLから、モジュール、アクションを使うかを設定する。
アプリケーションごとに設定(routing.yml)する。

default_index:
  url:   /:module
  param: { action: index }
モジュール名しか指定のない場合は、アクション名はindex

default:
  url:   /:module/:action/*
/aaa/bbbで書かれていたら、/モジュール名/アクション名と判断する。

default_symfony:
  url:   /symfony/:action/*
  param: { module: default }
/symfony/cccで書かれていたら、/defaultモジュール/アクション名cccと判断する。
これは使うところが決まっていたので、あとで説明します。

・/news/indexを/news/listにしたいとき、ルーティングルールを設定
追記するときは、「# default rules」の上に記述する。
(上に書いたものが優先される)
newslist:
  url:   /news/list
  param: { module: news, action: index }

・モジュール名/アクション名が基本であることは忘れないように!
  その上に追記する。
・「# default rules」以下はいじらない。
・必要なときだけルーティングを使用する。

・newsモジュールにdetailアクションを作成
/news/detail
同じページにパラメータを渡すことは良いとはされない。
実際にページが100あるとき、1ページにされる。

・ルーティング設定
newsdetail:
  url:   /news/detail/:id
  param: { module: news, action: detail }
・アクセス確認
/news/detail/10
→/news/detail?id=10

・リンク先にルーティング名を使用する
<?php echo link_to("詳細はこちら","@newsdetail?id=10");?>

4時間目
・(テンプレートの)部品化 
部品化には、パーシャル、スロット、コンポーネントという機能がある。
パーシャル:ロジックを含まない部品化
スロット:テンプレートからレイアウトを変更するための部品化
コンポーネント:パーシャルにロジックが加わったもの
コンポーネントスロットは、使う機会が少ないのでやらないそうです。

・パーシャルの例
front/layout.php
MENU<br />
<?php echo link_to("会員登録","/");?>

front/layout.php
<?php include_partial('global/menu'); ?>
アプリケーション全体で使うときは、「global」でlayout.phpと同じところに置く
(アプリケーションのテンプレートフォルダ:ファイル名は、_menu.php)

・同様にヘッダー、フッターも部品化する。

・shareモジュール作成
$ symfony init-module front share
デフォルトモジュールのindexSuccess.phpから呼ぶ

member_add/inputにも読み込む

・スロット
アクションで作成された画面以外で、テンプレートからレイアウトを追加する。
<?php echo $sf_data->getRaw('sf_content') ?>

indexSucces.php(アクションのテンプレート)
<?php slot('pankuzu');?>
HOME
<?php end_slot();?>

<?php include_partial("shared/message")?>

layout.php
<div id="pankuzu">
<?php include_slot('pankuzu');?>
</div>

・help画面にもindexSucces.phpに追加したものと同じものを追加


5時間目
パンくずの解説

・タイトルをスロットにする
layout.php
<?php include_title() ?>

<title><?php include_slot("title")?></title>

indexSuccess.php
<?php slot('title');?>
TOP | SHONANBBS
<?php end_slot();?>

課題:サイドメニューをスロットとパーシャルの組み合わせで作成
メニューをパーシャル化した。
<?php include_partial('global/menu', array('now' => 'top')); ?>
ここをlayout.phpから呼び出すためにスロットにする。
<?php include_slot('sidemenu'); ?>
メニューの具体的な内容は、以下へ記述
backend/template/_menu.php
サイドメニューをパーシャルにするということは、layout.phpに1度だけ記述していたものから、
全テンプレートでサイドメニューのパーシャルを呼ぶことになる。

・パーシャルに値を渡すことも出来る
第2引数に配列で記述する。

6時間目
・広告スペースをメニューにパーシャルで追加
・タイトルタグと、パンくず以外はスロットはあまり使わない。

・コンポーネント
部品を作成するためにデータベースからデータを取得する必要がある場合
(例)メンバーリストを表示

・コンポーネントの練習その2
最新記事5件を右サイドバーのメニューの下に表示

今日は、内容の把握が不十分なので、あとで整理します。

0 件のコメント:

コメントを投稿