最近、symfonyをよく触るようになった。忘れやすい部分や気になる部分をメモ。間違ってたり変なところがあればツッコミ歓迎です。
最初にやること
$ {symfony home}/data/bin/symfony init-project projectname
$ symfony init-app appname
自分のディレクトリにばらまかれるのでmkdirして潜ってからやること。
$ chmod 777 ./cache
$ chmod 777 ./log
$ rm -rf ./cache/*
$ rm -rf ./log/*
とかやってコミット。
$ svn propedit svn:ignore cache
$ svn propedit svn:ignore log
二つとも「*」とだけ入力して配下のファイルをignoreにする。できたらコミット。
モジュール作る
$ symfony init-module appname modulename
routingとか
moduleとactionが必要。パラメータはフォーマット指定可能。
routing_name:
url: /action/module/:param/*
param:
module: hogemodule
action: hogeaction
requirements:
param: ^[a-zA-Z0-9]+$
「./config/databases.yml」を書く。
all:
propel:
class: sfPropelDatabase
param:
phptype: mysql
host: localhost
database: hogedb
username: hogeuser
password: hogepw
encoding: utf8
「./config/propel.ini」を書く。
propel.database.createUrl = mysql://hogeuser:hogepw@localhost/
propel.database.url = mysql://hogeuser:hogepw@localhost/hogedb
scheme作る。
$ symfony propel-build-schema
詳しくは知らないけれどもdefaultあるとmodel作ろうとして失敗するのでperlを唱える。
参考: http://unicus.jp/wp/archives/19
$ perl -i -pe 's|^.*default.*\n||g' ./config/schema.yml
$ symfony propel-build-model
とかやってmodelを作る。
キャッシュクリア
何かと忘れずにやるように。
$ symfony cc
Actionでよくやること
User取る。
$this->getUser();
認証されてるかどうか。security.ymlと関係あり。
$this->getUser()->isAuthenticated();
Session。namespace使うなら引数増やす。
$this->getUser()->setAttribute($key, $value);
$this->getUser()->getAttribute($key);
リクエストパラメータの受け取り。
$this->getRequestParameter('hoge');
どこかへリダイレクト。routing.ymlにルールがあること。
$this->redirect('hoge/index');
テーブル作る。
CREATE TABLE session (
sess_id varchar(32) NOT NULL,
sess_data text NOT NULL,
sess_time datetime NOT NULL,
PRIMARY KEY (sess_id)
) ENGINE=MYISAM;
「./apps/appname/config/factories.yml」を書く。
all:
storage:
class: myMySQLSessionStorage
param:
db_table: session
database: propel
session_name: sessoinname
Propelでよくやること
プライマリキーで抜く。
TablenamePeer::retrieveByPk($id);
全部抜く。
TablenamePeer:doSelect(new Criteria());
先頭一つ抜く。
TablenamePeer:doSelectOne(new Criteria());
countする。
TablenamePeer:doCount(new Criteria());
WHERE句を作る。
$criteria = new Criteria();
$criteria->add(TablenamePeer::COLUMN_NAME, 'hoge');
ORDER BY句を作る。
$criteria->addAscendingOrderByColumn(TablenamePeer::COLUMN_NAME);
$criteria->addDescendingOrderByColumn(TablenamePeer::COLUMN_NAME);
LIMITを設定する
$criteria->setLimit($number);
OFFSETを設定する。
$criteria->setOffset($number);
JOINで抜く。(上は./config/schema.yml)
foreignTable: 'table'
foreignReference: 'column'
TablenamePeer::doSelectJoinAll($criteria);
特定JOINで抜く。
TablenamePeer::doSelectJoinTablenameRelatedByColumn($criteria);
JOIN後にリレーショナルテーブルを取得。三つ以上でJOINすると上手くいかなかった。
$record->getTablenameRelatedByColumn():
Helperでよく使うのを列挙
<?php
link_to($name = '', $internal_uri = '', $options = array())
button_to($name, $internal_uri, $options = array())
options_for_select($options = array(), $selected = '', $html_options = array())
form_tag($url_for_options = '', $options = array())
select_tag($name, $option_tags = null, $options = array())
input_tag($name, $value = null, $options = array())
input_hidden_tag($name, $value = null, $options = array())
input_file_tag($name, $options = array())
input_password_tag($name = 'password', $value = null, $options = array())
textarea_tag($name, $content = null, $options = array())
checkbox_tag($name, $value = '1', $checked = false, $options = array())
radiobutton_tag($name, $value, $checked = false, $options = array())
submit_tag($value = 'Save changes', $options = array())
reset_tag($value = 'Reset', $options = array())
submit_image_tag($source, $options = array())
label_for($id, $label, $options = array())
scaffold
アプリケーションを作る。
$ symfony init-app <APPLICATION_NAME>
crudを作る。「propel-generate-crud」ではなく「propel-init-crud」を使うとフレームワーク側のコードを継承した形になる。
$ symfony propel-generate-crud <APPLICATION_NAME> <MODULE_NAME> <CLASS_NAME>
ざっくりとこんな感じで。また追記するかも。