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 : メールアドレスの形式として正しいかどうかのチェック