symfony1.4で日本語のメールを送れるようにする
今更ながらsymfony1.4ですが・・・
日本語メール(iso-2022-jp)を送らなければならない機会にまだまだ遭遇して毎回検索するのもめんどうなので覚書。
jpSimpleMailPluginをインストールするだけでらくちんぽんで日本語メールが送れる優れもの!
インストールから送信まで楽々。
まずはインストール。openpear.orgからsymfonyコマンドで落とせるよ。
./symfony plugin:add-channel openpear.org ./symfony plugin:install --force-license --release=1.0.0 openpear.org/jpSimpleMailPlugin
だけwインストールされたかの確認は
./symfony plugin:list
実行でjpSimpleMailPluginが出力されればOK!
早速action内でのメール送信実装。
symfony1.4であればSwiftMailer4がすでにインストールされれいるので直ぐに使える!
<?php try { $date = date('Y年m月d日'); $format = '%s <%s>'; $mailer = jpSimpleMail::create('SwiftMailer4'); $mailer->setFrom(sprintf($format, '送信者', 'sample@sampledomain.com')); $mailer->addTo(sprintf($format, '送信先', 'to@sampledomain.com')); $mailer->setSubject('タイトル'); $mailer->setBody($this->getPartial('createMail', array('date' => $date)); $rs = $mailer->send(); } catch (jpSendMailException $e) { // ここにエラー対応の処理を入れる $this->logMessage('メール送信エラー'); }
メール本文をテンプレートファイルに記載しているので、別途同一モジュール内のtemplateディレクトリに _createMail.php で本文を作ろう。
getPartial()の第二引数に配列で値を渡せば、キーと同一名の変数で取得可能。
上記例だと_createMail.php内で$dateとすれば今日の日付が取得できる。
これできれいなコードで動的にメール本文が作れるね。
メールが送信できなければ$rsに0が代入される。
factories.ymlで送信しない設定でも何らかのエラーで送信ができなくても0らしい。
画面右上のデバッグツールにあるメールアイコンで送信内容を確認できるぞ。
下記リンクは参考サイト
ぷぎがぽぎの人は恐らく仕事で会った事ある人・・・
pathinfo()関数で日本語のファイル名が扱えないの?
PHP5.3.10で作られたファイルを取り扱うシステムで、日本語ファイルが取り扱えない不具合が発生。
原因を調査すると、pathinfo()関数で取得したbasenameがおかしい。
たとえば、「日本語abc.txt」のようなファイル名は「abc.txt」として出力されてしまう。
先頭に日本語がある場合だけおかしくなり、「abc日本語.txt」のようなファイル名では問題ない。
どう考えてもpathinfo()の挙動がおかしいのだ。
ぐーぐる先生に聞いてみても、
おまえ、それPHPのバグだから。 PHP6が出るまで諦めろ!
的な内容ばかり見られる。
だが待て!
同じコードが他のサーバーでは問題なく動いているんだよ!
特定のサーバーだけが動かないんだよ!!
PHPの公式マニュアルの下のほうに、マルチバイト使用時に関する注意書きがさりげなくある。
PHP: pathinfo - Manual
ほうほう。ロケールとな。
試しに、現在のロケール情報を調べてみたら、動かないサーバーだけうまく取得できない!!
それを全て解決してくれた魔法の言葉があったので記しておく。
日本語を取り扱う環境で、サーバーの文字コードがUTF-8の場合。
まぁ、CentOSでの設定。
setlocale(LC_ALL, 'ja_JP.UTF-8');
この復活の呪文のおかげで、見事復活!!
ありがとう、setlocale関数。最高だよsetlocale関数。
cygwinの設定
慣れてくると便利なunixコマンド達。
かわいくて常に傍にいたい!!
てな人がいるかもしれない。
だけどそんな人が、「開発環境はWindowsのみです(キリッ」なんて言ってくる職場になってしまうかもしれない。
人生が全て終わりだ。もう生きている意味がない・・・
「まぁ、待ちなよ。そんなに簡単に人生あきらめちゃいけねぇぜ。」(誰
救世主cygwinの登場だ!!きゃー(//▽//)
本体のインストールと最低限wgetパッケージのインストールを行っておく。
詳細やインストールに関してはggrks。(何様だ
それが終わって起動してからのメモ。
proxy環境での使用
社内からなどで利用する場合、proxy設定が必要になってくる。
基本的には、windows環境で設定されたネットワークで利用できるのだが、proxy情報は別途設定が必要。
cygwin上からproxy経由で使用する場合は、.bashrcに記述することで対応できる。
export http_proxy
この項目にサーバーとポートを記述すれば大丈夫。
apt_cygのインストール
cygwinのパッケージ追加って、インストールに使用したsetup.exeを起動していちいち選択しなきゃならない。
そんなのめんどいよ。
かといって、ソースコードからコンパイルもめんどいし、バージョン管理も大変。
aptコマンドプリーズ・・・
そんな状況にはこれ、apt-cygコマンド!!
まんま、aptコマンドと同じようにcygwin環境で活躍してくれる。
早速インストールするぜ!!(このためにwgetコマンドだけ先にインストールしておいた)
wgetコマンドで取得してきて、/binディレクトリに移動して実行権限を付与する。
wget.exe http://apt-cyg.googlecode.com/svn/trunk/apt-cyg mv apt-cyg /bin/ chmod.exr +x /bin/apt-cyg
これでapt-cygコマンドが使えるようになる。
vimやscreenを楽チンインストールできちゃう。
apt-cyg install screen apt-cyg install vim
2015-11-11追記
久々にやったらapt-cyg install でmd5ハッシュ値が違うって怒られた。
実際に/setup/配下にインストールされたファイルを見ると、md5ではなくsha512ハッシュ値が記載されてた。
あれ?って思って調べたら、とまってた開発がgithub上で再開したみたいだった。
なので取得先が変わる。
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
WindowにインストールされているMySQLサーバーを使用
xamppなどで既にインストールされているMySQLサーバーへ接続には--protocol=tcpを渡す。
アカウントがusernameでdb_nameデータベースへログインする場合は以下になる。
(カラム名などタブで自動補完してくれる--auto-rehashオプション付)
mysql --protocol=tcp --auto-rehash -uusername -p db_name
パスワードプロンプトが表示されるので、パスワードを入力してENTERキーをッターンとやればログインできる。
alias登録しておけば、いちいち入力しなくても簡単にアクセスできる。
lsコマンド・grepコマンド結果を色付きにする
-
- color=autoオプションをつける事で見やすい結果表示になる。
ディレクトリや実行ファイルなどが見つけやすくなるね。
ls --color=auto /home/username/ grep --color=auto 'keyword'
これもalias登録しておけば、常に色付き。
よく使うls -lコマンドもまとめてalias設定しておけばひと手間省ける。
まとめ
~/.bashrc が以下のとおりになる。
# proxy設定 proxy=http://proxy-server-name:8080/ export http_proxy=$proxy export ftp-proxy=$proxy # データベース接続 alias mysql="mysql --protocol=tcp --auto-rehash -uusername -p db_name" #色付きGREP alias grep="grep --color=auto" #色付きLS alias ls="ls --color-auto" alias ll="ls -l"
Fedoa14でLDAPサーバを構築
追記[2013/2/19]:再度構築を行った際、新たな情報を手にしたので記事を修正してます。
ユーザ管理がされていなかったので、デスクトップPCとして使っていたFedora14にOpenLDAPを構築。
サーバ機を購入できるまではこれで頑張る!
サーバ・クライアントをインストール
パッケージで用意されているので、必要な物をyumコマンドを使ってインストール。
sudo yum install openldap-servers openldap-clients
サーバの環境設定
インストールしたら設定だぜ。
でも、/etc/openldap/slapd.confがないなー。
あれか、「Ubuntu10.10 に OpenLDAPサーバのインストール&設定 - クマーのえんじにありんぐ 」と一緒か。
でも初っぱなからこけてうまくいかない。ググったら以下の記事を発見!
- まず、/usr/share/openldap-servers/slapd.conf.obsolete から /etc/openldap/slapd.conf にコピー。
- ハッシュ化したパスワード生成
- コピーしてきた設定ファイルを環境に合わせて変更
- 新しくできた設定ファイルをDBに反映させる。
って流れで作業する。あとデータベースをサンプルからコピーする。
sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG sudo cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf sudo slappasswd sudo vi /etc/openldap/slapd.conf
slappasswdコマンドでは、パスワードを二回聞かれるので、新しく設定したい管理用のパスワードを入力する。
{SSHA}**************** の様に結果が返るので(*は文字で入力した値により変化)それをコピーしておく。
そして、slapd.confの主な変更箇所は以下の通り。
#include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema #include /etc/openldap/schema/duaconf.schema #include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema #include /etc/openldap/schema/java.schema #include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema #include /etc/openldap/schema/ppolicy.schema #include /etc/openldap/schema/collective.schema # bind_v2を使用しないのであれば、不具合が起きにくくなるようコメントアウト #allow bind_v2 # -- 略 -- suffix "dc=your-domain,dc=net" # 個別の環境に合わせてドメイン設定 rootdn "cn=Manager,dc=your-domain,dc=net" # 個別の環境に合わせてドメインと管理者を設定 rootpw {SSHA}************ # slapdpasswd で生成された文字列を貼り付け # -- 略 -- access to attrs=userPassword by dn="cn=Manager,dc=your-domain,dc=net" write by self write by anonymous auth by * none access to * by dn="cn=Manager,dc=your-domain,dc=net" write by self write by * none database monitor rootdn "cn=admin,cn=monitor" rootpw {SSHA}************* # slappasswdで生成された文字列を貼付け access to * by dn="cn=admin,cn=monitor" read database config rootdn "cn=config" rootpw {SSHA}************* # slapdpasswdで生成された文字列を貼付け #TLS用に証明書関連の設定 TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt #CA証明書 TLSCertificateFile /etc/pki/tls/certs/slapd.pem #サーバ証明書 TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem #証明書秘密鍵
追記:今回構築する環境は、ログイン認証にsssdが使用される。
sssdは認証やら問い合わせやらを一手に引き受けてくれるのだが、認証処理はTLSまたはLDAPSプロトコルが必須となる。(詳しくはぐーぐる先生に聞こう)
その為に、証明書と秘密鍵が必要になる。イントラ内での使用なので、おれおれ証明書を使う事にした。
といっても、わざわざ証明書を発行するのも手間。
そんな時見つけた情報
http://almondy.net/xoops/modules/pukiwiki/?LDAP%A4%CESSL%A1%BFTLS%B2%BD
を参考に、OpenLDAPインストール時に用意されているデフォルトの証明書を使用する事にした。
要件的に厳格な証明書である必要がないので、こりゃ楽ちんだ。
設定ができたら、redhatのドキュメントにあった通りに実行する。
これはslapd.confの内容をLDAPのデータベースに変換する作業。
slaptest実行でslapd.dディレクトリ配下に作成されたDBを読むらしい。
設定の状態を常にオンメモリしてる。以前とは違うのね。
sudo rm -rf /etc/openldap/slapd.d/* sudo slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d sudo chown -R ldap:ldap /etc/openldap/slapd.d sudo chmod -R 000 /etc/openldap/slapd.d sudo chmod -R u+rwX /etc/openldap/slapd.d
そして再起動させて問題なければ今回作成したconfファイルは削除。
・・・削除しなくても問題ないので、残しておいた方が後々の為になるかも。
キャッシュさせて負荷軽減を図るためnscdも起動。
あと、パーミション設定だけしておくか。
sudo /etc/init.d/slapd restart sudo /etc/init.d/nscd start chmod 600 /etc/openldap/slapd.conf
LDAPでログインさせるために(authconfig-tui編)
sudo yum install nss-pam-ldapd sudo authconfig-tui
nss_ldapをインストールした後、認証方法の変更をする。
- ユーザ情報で「LDAP を使用」を有効にする(該当欄でスペースを押す)
- 認証で「LDAP 認証を使用」を有効にする(該当欄でスペースを押す)
- 「次」を選択
- LDAPの設定で以下の値を設定する
- 「OK」を選択
と行えばよいはずなんだが、うまく認証できない。
ググっていたら「http://clehou.com/article.php?story=20110523220534275」な記事を見つけた。
どうやら、生成される設定ファイルに問題があるようだ。
pam_ldap.soを使用しなければならぬ所を、pam_sss.soと記述されているので直す必要がある。
対象は /etc/pam.d/password-auth と /etc/pam.d/system-auth だ。
vimで :%s/pam_sss/pam_ldap/g コマンド一発で終わる。
system-authファイルは以下のようになる。初めからエディターで設定したほうがいいかもね。
追記:初期で設定されているpam_sssがTLS必須になっていた。
そのため、認証がうまくいかない状態であった。
今回はイントラ内なので、おれおれ証明書を用意して/etc/sssd/sssd.confに修正を行う。
そうすれば、pam_sssのまま置換しなくても問題ない。
TSLでない方法を模索したけど、どれもうまくいかない。
service_err=ignore と system_err=ignore、pam_mkhomedir項目を追加
authinfo_unavail=ignoreを設定しないと、slapdが起動していない場合に/etc/passwdのユーザもログイン出来なくなるらしいので、こちらも追加。
ldapサーバが落ちても問題ないようにする。
/etc/pam.d/password-auth と /etc/pam.d/system-auth の両方
auth sufficient pam_sss.so use_first_pass
account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore] pam_sss.so
session optional pam_sss.so
session optional pam_mkhomedir.so skel=/etc/skel umask=077
#最後の項目は、ログイン時にホームディレクトリが存在していなければ自動で生成する指定
/etc/sssd/sssd.conf の[domain/default]項目内に追加
- おれおれ証明書対応の設定
- getent passwd コマンド等で一覧を取得出来るようにする
[domain/default] ldap_tls_reqcert = never #おれおれ証明書対策 enumerate = True #getentコマンド対策
この設定を変更したら、CA認証局をOSが既に持っている物をコピー。
nss-pam-ldapdに含まれているnslcdデーモンを起動する事でLDAPに問い合わせ出来る。
最後にsssdも再起動。
cp /etc/pki/tls/certs/ca-bundle.crt /etc/openldap/cacerts/ /etc/init.d/nslcd start /etc/init.d/sssd restart
/etc/nsswitch.conf の以下の項目も修正
追記:特に修正しないでそのままでOK。以下の通りにはしない。
passwd: files ldap shadow: files ldap group: files ldap netgroup: files ldap
/etc/pam_ldap.conf /etc/nss_ldap.conf に以下の設定が必要。
これを行う事で、LDAPサーバが応答ない場合は処理を待たない。
OS起動時にslapdが起動する前にユーザ参照が行われる様で、この設定をしておかないと起動に20分とかかかる。。。。
bind_policy soft
getent passwd コマンドで登録したユーザーが引けるか確認。
問題なく引ければサーバ設定完了。
ちょっとはまった
ログインは出来たのに、passwdコマンドでパスワード変更ができない。
/var/log/secure には pam_sss(passwd:chauthtok): Password change failed for user xxx: 4 (システムエラー) が残されていた。
試しにslappasswdコマンドで変更を試みたけどエラー。どうやらパーミッション関連らしい・・・
ldapaclコマンドでxxxユーザ情報の権限を確認してみた。
ldapacl -b "uid=xxx,ou=People,dc=yourdomain,dc=net"
userPassword が auth ではなくread。あれ??
設定されているアクセス権限情報をみてみた。
ldapsearch -x -D "cn=config" -W -b "cn=config" olcAccess
bdb, config の項目の olcAccess が access to * by * read だけだと!?
原因は、slapd.conf の access to attr=userPassword 項目の前にdatabase monitor が書かれていた事だった。
なぜこの設定がこのような場所に書かれていたのかは謎であるが・・・
そのおかげで、本来は認証情報が入っているbdbへのACL(アクセス権限)設定が違うデータベースに反映されていた。
上記のslapd.conf設定内容はそれを回避した設定になっているので問題ない。
再設定を終えてslapsearchコマンドでもちゃんとアクセス権限ができているのに読めないorz
しかも色々トライしていて、いつの間にか認証そのものや getent passwd でもでてこないorz
なーんて泣きながら色々してたら突如出来るようになった。
あぁ、キャッシュしてたんだっけね・・・・その辺の再起動もし忘れないように!
LDAPでログインさせるために(手動で設定ファイル編集編)
最近の構成は、色々なモジュールが絡み合っているのでかなり複雑。
なので、手動で設定ファイルを書き換えるこの方法はおすすめしない。
どうしてもと言う場合の参考程度にしかならない。
実際にこの方法ではpasswdコマンドでパスワード変更ができなかった。
authconfig-tuiは何だか問題あるので手動で行う場合はこっち。
ログイン用のモジュールをインストール。これは一緒。
sudo yum install nss_ldap sudo vim /etc/pam.d/system-auth sudo vim /etc/sysconfig/authconfig sudo vim /etc/nsswitch.conf
system-authの設定
auth sufficient pam_ldap.so use_first_pass account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore] pam_ldap.so #ldapサーバが落ちていてもシステムを止めないaccount設定 session optional pam_ldap.so session optional pam_mkhomedir.so skel=/etc/skel umask=077 #最後の項目は、ログイン時にホームディレクトリが存在していなければ自動で生成する指定
authconfigの設定
USELDAP=yes # noからyesに変更 USELDAPAUTH=yes # noからyesに変更
nsswitch.confの設定
password: files ldap shadow: files ldap group: files ldap
次に行うのが、 /etc/ldap.conf の設定。
……ファイルがない…だと!?
認証に使用されるnss_ldap,pam_ldapが参照する設定ファイルが存在しない。
ダミーで作っても設定が反映されない。
ググっても、さも当然のように/etc/ldap.confを設定しろとでてくる。
が!!
/etc/ldap.conf の代わりに、/etc/nss_ldap.conf /etc/pam_ldap.conf を使用するらしい事を発見。
それぞれのファイルに以下を設定する。
base dc=your-domain,dc=net uri ldap://127.0.0.1/ bind_policy soft tls_cacertdir /etc/openldap/cacerts
bind_policy soft の設定をしないと、認証処理などでLDAPサーバが起動していないときに長いこと待たされる。
これは、問い合わせができなかったら諦めろ的な内容。hardに設定するとリトライを繰り返す。
特に注意したいのは、サーバー自体を起動した際、LDAPが起動する前にユーザー権限などを参照する処理が走る事。
その時にユーザー等を問い合わせているのでLDAPに問い合わせができず起動が失敗したかのように待たされる。
実際に設定し損ねて際起動した際は、20分も待たされた。遅いでしょ。
この /etc/ldap.conf がない& bind_policy soft が設定できないで3日間もハマったのは、今となってはいい思い出。・・・・・・・でもないな(怒
もう一つハマったのが、mdmonitorさん。
OSを再起動したら、slapdが起動できない。なにやら、DBがなくなったとか何とかでエラー。
たまたまかと思ったけど、再度DB構築し無事slapd起動できても同じ現象になった。
犯人はmdmonitorモジュール。ソフトウェアRAIDの監視をしてるらしいんだが。
標準で組み込まれているサービスモジュールだが、そもそもRAID組んでないので必要ない。
だからサービスで起動させないで、さよならしたった。
setupコマンドからシステムのサービスでできるよ。
さくらサーバでSSL通信にリダイレクト
さくらのレンタルサーバで、スタンダードプランでのお話。
お問い合わせフォーム的なページを作成して、HTTP通信な時はHTTPSにリダイレクトさせたかった。
アプリ側で切り替え制御させようとしたんだけど、これがなぜかうまくいかない。
SSL(HTTPS)通信でアクセスしても、HTTP通信として認識されてしまう。
???
んじゃま、.htaccess設定でmod_rewrite活用するか。ってことで、
RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^form https://ドメイン.sakura.ne.jp/form [QSA,R,L]
formへリクエストが来たら、SSLドメインへGETパラメータをそのまま付与[QSA]してリダイレクト処理[R]。
ありゃりゃ??
無限リダイレクトになっちまったぞい(・ω・`)
サーバ変数を調べたら、SSL通信でも80番ポートでアクセスしてる…
どうやら、共有SSL使用するとproxy経由で80番ポートにアクセスしてくるらしい。
SSLかどうか判定できないじゃないか……
アプリ側でサーバ変数を拾っていたら、proxy経由つまりSSL通信のときだけに取得できる変数があった。
その名も…HTTP_X_SAKURA_FORWARDED_FOR。
proxy経由だとアクセスログ等が常に同じになってしまうのを防ぐために、接続元のIPなんぞを取得できるようにする為の変数に HTTP_X_FORWARDED_FOR なるものがあるらしいんだが。
それのさくら仕様の変数なのか?
mod_rewriteは、特定のサーバ変数以外は読み込めないらしいのでちょっと書き方が違う。
RewriteCond %{SERVER:X_Sakura_Forwarded_For} ^$ RewriteRule ^form https://ドメイン.sakura.ne.jp/form [QSA,R,L]
で設定したら成功した。だが、これが正しいのかは不明だ…
symfony schema.yml の覚書
頭に搭載されている記憶装置が調子悪いので、忘れてもいいように……
symfony1.4とDoctrineで使うDBスキーマの定義。
定義内容
テーブル定義
テーブルクラスに設定できる項目
- abstract
- 生成クラスをabstractするかどうか。デフォルトはfalse。クラスはabstractのときはデータベースにエクスポートされない。
- className
- 生成するクラスの名前
- tableName
- 使用するDBMSのテーブルの名前
- connection
- モデルにバインドするDoctrine_Connectionインスタンスの名前
- columns
- カラムの定義
- relations
- リレーションの定義
- indexes
- インデックスの定義
- attributes
- 属性の定義
- actAs
- ActAsの定義
- options
- オプションの定義
- inheritance
- 継承の定義用の配列
- listeners
- アタッチするリスナーを定義する配列
- checks
- DBMSにエクスポートするのと同様にアプリケーションレベルで実行するチェック
カラムの定義
各テーブルクラスに設定したカラム内に設定できる項目
- name
- カラムの名前
- fixed
- カラムが修正されるかどうか
- primary
- カラムが主キーの一部であるかどうか
- autoincrement
- autoincrementカラムであるかどうか
- type
- Doctrineのカラムのデータ型
- length
- カラムの長さ
- default
- カラムのデフォルト値
- scale
- カラムのスケール。decimal型に使用される
- values
- enum型用の値のリスト
- comment
- カラム用のコメント
- sequence
- カラム用のシーケンスの定義
- zerofill
- カラムの空の文字列をゼロで満たすかどうか
- extra
- カラム定義に保存する追加情報の配列
- unsigned
- 符号なし数値
リレーション定義
relations内に設定したクラスに設定できる項目。
relations定義内に、各リレーション(外部キー設定)毎にリレーション先クラスを定義する。
- class
- リレーション用に使うクラスの名前。
- alias
- リレーションを識別するために使うエイリアス。
- type
- リレーションの型。値はoneもしくはmanyのどちらかでデフォルトはone。
設定側から見て相手レコードが複数存在する場合にmany。 - refClass
- 多対多のリレーション用に使われる中間の参照クラス。
- local
- リレーションで使われるローカルフィールドの名前。
- foreign
- リレーションで使われる外部フィールドの名前。
- foreignAlias
- リレーションの反対端のエイリアス。autoCompleteがtrueに設定されるときのみ許可されます。
- foreignType
- リレーションの反対端の型。autoCompleteがtrueに設定されるときのみ許可されます。
- autoComplete
- リレーションを反対側に追加して双方向にするかどうか。デフォルトはtrue。
- cascade
- アプリケーションレベルのカスケーディングオプション。
- onDelete
- データベースレベルのカスケーディング削除の値。
- onUpdate
- データベースレベルのカスケーディング更新の値。
- equal
- リレーションが入れ子の多対多に等しいかどうか。
- owningSide
- -
- refClassRelationAlias
- -
継承定義
- type
- 使用する継承の型。許可される値はconcrete、column_aggregation、とsimple
- extends
- 継承するクラスの名前
- keyField
- column_aggregation継承用のキーとして使用するフィールドの名前。
- keyValue
- column_aggregation継承でkeyFieldを満たす値
インデックス
- name
- 作成するインデックスの名前
- fields
- インデックスの中で使うフィールドの配列
- unique
- インデックスがユニークかどうか
グループに所属しているユーザを表す場合のスキーマサンプル
userテーブルとgroupテーブルを用意し、ORマッパーではそれぞれUserクラスとGroupクラスで取り扱えるようにする。
必ず主キーを設定しレコード作成日・更新日を記録する。各テーブルの個別定義は以下とする。
- ユーザテーブル
- 所属グループIDと名前を保持する
- 名前フィールドにインデックスを設定
- 物理削除ではなく論理削除とする
- グループテーブル
- グループ名を保持する
接続用のconfig/database.yml
all: user_admin: class: sfDoctrineDatabase param: dsn: mysql:host=localhost;dbname=user_admin username: mysqluserid password: mysqluserpass
スキーマYAML config/doctrine/schema.yml
User: connection: user_admin tableName: user columns: id: type: integer(4) fixed: false unsigned: true primary: true autoincrement: true group_id: type: integer(4) fixed: false unsigned: true primary: false notnull: true autoincrement: false comment: '所属グループID' name: type: string(255) notnull: true comment: 'ユーザ名' relations: Group: local: group_id foreign: id type: one actAs: Timestampable: SoftDelete: options: comment: 'ユーザ情報' Group: connection: user_admin tableName: group columns: id: type: integer(4) fixed: false unsigned: true primary: true autoincrement: true name: type: string(255) notnull: true comment: 'グループ名' actAs: [Timestampable] options: comment: 'グループ情報'
actAsにTimestampableを設定すると、新規登録・更新実行時に時間が記録され
created_at: type: datetime notnull: true updated_at: type: datetime notnull: true
フィールドが自動で追加される。
actAsにSoftDeleteを設定すると論理削除扱いとなり、自動的に
deleted: type: boolean notnull: true default: false
フィールドが追加される。
Ubuntu11.10 ウィンドウが勝手にフィット
Ubuntu使っていて、マウスを画面端に合わせると黄色い枠が現れる。
どこでうっかりクリックしようものならば、アクティブなウインドウが枠にぴったり勝手にリサイズ。
特にVirtualBox上で起動している時なんか、ホストOSと行き来してる時にしょっちゅう現れて、せっかくサイズ調整していたウィンドウが・・・
この機能が邪魔な事邪魔な事・・・
そんな時の強い味方、CompizConfig設定マネージャ助けてー!!
インストールしようぜ!
apt-get install compizconfig-settings-manager
なんなら、ubuntuソフトウェアセンターから「compiz」で検索すれば、「CompizConfig設定マネージャー」が出てくるから、そこからインストールでもいいよ?
インストールしたら、起動してセッティングしようぜ!
Ubuntuアイコンクリック、Dashホームアイコンともいうをクリックして「ccsm」で検索すれば、CompizConfig設定マネージャーが見つかるよ。
起動したら、「ウィンドウ・マネジメント」に分類されている「Grid」のチェックを外せば大きなお世話機能ともおさらばさ。
調子こいてあんましカスタマイズしてると、VirtualBoxのUbuntuが息絶えてしまう・・・程々に。