PHP×symfony

Apacheのインストール

・CentOSでyumでインストール

# yum install httpd

・httpdサービスの起動

# /etc/init.d/httpd start

もしくは

# service httpd start

・httpdの自動起動

# chkconfig httpd on

 

MySQLのインストール

・mysqlサーバのインストール

# yum install mysql-server

・mysqlサーバの起動と自動起動

# /etc/init.d/mysqld start
# chkconfig mysqld on

 

PHPのインストール

# yum install php

・PHPのmysqlエクステンション,php-xmlライブラリ,pearコマンドのインストール

# yum install php-mysql php-xml php-pear

 

symfonyのインストール

・PEARライブラリの最適化

# pear upgrade PEAR

・PEARコマンドによるsymfonyのインストール

# pear channel-discover pear.symfony-project.com
# pear install symfony/symfony

・symfonyインストールの確認

# symfony -T

 

プロジェクトの作成

・プロジェクトディレクトリの作成

# mkdir /var/www/[projetc_name]

例) # mkdir /var/www/sampleproject

・プロジェクトの初期化 (symfony init-projectコマンド)

# cd /var/www/[project_name]
# symfony init-project [project_name]

例) # cd /var/www/sampleproject

# symfony init-project sampleproject

※symfonyコマンドは必ずプロジェクトディレクトリ直下で実行

 

アプリケーションの初期化/生成 (symfony init-appコマンド)

# symfony init-app [app_name]

例) # symfony init-app bbs

Webディレクトリに index.php (アプリケーションのトップページ)が自動生成

 

httpd.confの設定 (/etc/httpd/conf/httpd.conf)

DocumentRoot “/var/www/[project_name]/web”

Alias /sf /[PEAR_dir]/data/symfony/web/sf

<Directory “/[PEAR_dir]/data/symfony/web/sf”>
AllowOverride All
Allow from All
</Directory>

<Directory “/var/www/[project_name]/web”>
AllowOverride All
Allow from All
</Directory>

例) DocumentRoot “/var/www/sampleproject/web”

Alias /sf /usr/share/pear/data/symfony/web/sf

<Directory “/usr/share/pear/data/symfony/web/sf”>
AllowOverride All
Allow from All
</Directory>

<Directory “/var/www/sampleproject/web”>
AllowOverride All
Allow from All
</Directory>

 

デバッグ用スクリプトファイル

・アプリケーションの生成時に自動生成

/var/www/[project_name]/[app_name]_dev.php

例) /var/www/sampleproject/bbs_dev.php

・ブラウザからアクセス

http://[server-name]/[app_name]_dev.php

例) http://symfony-server/bbs_dev.php

 

モジュールの作成

# symfony init-module [app_name] [module_name]

例) # symfony init-module bbs hello

・ブラウザからのアクセス

http://[server-name]/[module_name]

または

http://[server-name]/index.php/[module_name]

例) http://symfony-server/hello
http://symfony-server/index.php/hello

アドレスの最後に”/”があってはいけない

・モジュールの格納場所

apps/[app_name]/modules/[module_name]/

例) apps/bbs/modules/hello/

・symfonyのモジュールにアクセスした際の挙動の記述先

apps/[app_name]/modules/[module_name]/actions/actions.class.php

・モジュール実行結果のビューの記述先

apps/[app_name]/modules/[module_name]/templates/[file_name]

※symfonyのキャッシュのクリア

# symfony cc

 

データベースの設定とモデルの生成

・symfonyとPropelの設定ファイル群
configディレクトリ内

databases.yml   propel.ini   schema.yml

databases.yml
コメントアウトを解除

all : →全てのアプリケーションで使用
 propel : →接続名を「propel」とする
 class : sfPropelDatabases →O/Rマッパの指定
 param : →接続パラメータの記述
   dsn : mysql://root:@localhost/sample →データベース接続情報の指定
   encofing : utf8 →データベースのエンコーディング指定

● propel.ini (O/Rマッパの設定)

データベースアクセスに関する項目の修正

propel.databases = mysql

(使用するデータベースドライバの指定)

propel.databases.createUrl = mysql://root@localhost/

(データベース生成時の接続先情報)

propel.databases.url = mysql://root@localhost/sample

(実際に使用するデータベース情報)

schema.yml
基本構造 (記述)

接続名:
テーブル名:
属性/カラム名:データ型

例) propel:
bbs_sample:
_attributes :{phpName:bbsData}
id:
title: varchar(100)
username: varchar(50)
comment: longvarchar
created_at:
updated_at:

_attributes属性
phpName → テーブルを扱うモデルクラス名
phpNameの省略 → デフォルトの命名規則
デフォルトの命名規則 … テーブルのアンダースコア式の名称をlowerCamelCase
例) bbs_sample → bbsSample

“id”のデータ型の省略 → Primary Key , Auto_increment

“created_at” , “updated_at”のデータ型の省略 → Datatime型

 

データベースとテーブルの作成

・データベースの作成

# mysql -u root -p [password]
mysql> create database [DB_name] character set utf8
mysql> exit

・モデルとテーブルの作成

# symfony propel-build-all

※propel-build-allのコマンドは3つのコマンドを連続実行している
# symfony propel-build-model
# symfony propel-build-sql
# symfony propel-insert-sql

propel-build-modelコマンドでモデルを生成
propel-build-modelコマンドで5ファイルが自動生成
lib/model/[module_name].php                派生クラス
lib/model/[module_name]Peer.php             派生クラス
lib/model/om/Base[module_name].php          基底クラス
lib/model/om/Base[module_name]Peer.php      基底クラス
lib/model/map/[module_name]MapBuilder.php    O/Rマッピング記述ファイル

例) lib/model/bbsData.php
lib/model/bbsDataPeer.php
lib/model/om/BasebbsData.php
lib/model/om/BasebbsDataPeer.php
lib/model/map/bbsDataMapBuilder.php

propel-build-sqlコマンドでSQLを生成
モデルクラスに対応するテーブルを作成するSQLを作成
data/sql/lib.model.schema.sql

 

CRUDの自動生成 ~Scaffolding(土台生成)~

※CRUD …
データベースにおいて、データの作成(Create), データの取得(Read(Retrieve)), データの更新(Update), データの削除(Delete(Destroy)
・symfonyでScaffolding機能を利用

# symfony propel-generate-crud [app_name] [module_name] [modelclass_name]

 

ビューの内容の変更

view.yml

ヘッダデータなどのメタ情報を設定するファイル
apps/[app_name]/config/view.yml
例) apps/bbs/config/view.yml

layout.php

アプリケーション全体で共通に使用するHTMLテンプレート。
Webサイトのヘッダやフッタなどの共通部分を記述。
apps/[app_name]/config/layout.php

個々のHTMLテンプレート

apps/[app_name]/modules/[module_name]/template/[files]

 

バリデータ機能の実装

省略
sfStringValidator  : 文字列のサイズのチェック
sfNumberValidator : 数値かどうかおよびそのサイズのチェック
sfEmailValidator   : メールアドレスの形式として正しいかどうかのチェック