最近、symfonyをよく触るようになった。忘れやすい部分や気になる部分をメモ。間違ってたり変なところがあればツッコミ歓迎です。
最初にやること
$ {symfony home}/data/bin/symfony init-project projectname $ symfony init-app appname
自分のディレクトリにばらまかれるのでmkdirして潜ってからやること。
Subversionのignoreとか
$ 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]+$
MySQL関連
「./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');
SessionをMySQLで
テーブル作る。
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())