symfony で普段使っているpluginをまとめてみた
この記事はSymfonyアドベントカレンダー2010の19日目です
1. sfWebBrowserPlugin - RESTful APIを利用するならお手の物。HTTP通信なら完全お任せ!
READMEを見ると利用方法が事細かに書かれているので非常に分かりやすいですね。
このpluginでは 3種類のインターフェイスをアダプターという形で用意しています。
- sfCurlAdapter
- sfFopenAdapter
- sfSocketsAdapter
どれを利用しても良いのですが、Forward Proxy経由でHTTPリクエストを送りたい事があるため、sfCurlAdapterを利用しています。
(例)
<?php $b = new sfWebBrowser(array(), 'sfCurlAdapter', array('httpproxytunnel' => 1, 'proxy' => 'http://proxy.example.com:8080', 'proxyport' => '8080', ) );
クラウド環境を利用していて、webサーバがオートスケールで増えてくれるのはいいけれども、振られるグローバルIPが何になるのか分からない場合などに使えますね!
※1. IPアドレスでの通信制限が無い場合は、気にする必要はないです。
※2. ロードバランサーがNATしてくれている場合は、気にしなくてもOK
2. sfDoctrineMasterSlavePlugin - DBのReplicationをするならまずこれでしょう!
Symfonyアドベントカレンダー2010の12日目にvectorxenonさんがsfDoctrineMasterSlavePluginの事を書かれております。
このpluginで何が1番嬉しかったかというと、マスターの分散が出来ることです。
# databases.yml all: # db1 connections db1_master: class: sfDoctrineDatabase param: dsn: mysql:dbname=db1;host:db1-master.example.com username: root password: ~ group: db1 db1_slave: class: sfDoctrineDatabase param: dsn: mysql:dbname=db1;host:db1-slave.example.com username: root password: ~ group: db1 # db2 connections db2_master: class: sfDoctrineDatabase param: dsn: mysql:dbname=db2;host:db2-master.example.com username: root password: ~ group: db2 db2_slave: class: sfDoctrineDatabase param: dsn: mysql:dbname=db2;host:db2-slave.example.com username: root password: ~ group: db2
selectの負荷はSlaveサーバを増やすことによって解決できますが、
更新系処理が多くなってくる場合、それでは対応できません。
上記のようにMaster and Slaveサーバのグループを用意し、schema.ymlで対応するconnectionを指定すればOKです。
# schema.yml User: connection:db1 columns: name: { type: string(255), notnull: true } LegacyUser: connection:db2 columns: name: { type: string(255), notnull: true }
3. sfAdminDashPlugin - 手軽にシャレオツ管理画面を提供したい場合に!
README に設定方法が書かれていますが、id:ken39argさんがsfAdminDashPluginがかなりいい件についてという記事で、ハマりどころも合わせて書かれています。
WEBサービスを作る上で管理画面って結構後回しにされがちですが、このpluginで手軽にシャレオツな管理画面が作れるので重宝しています。
4. sfTaskExtraPlugin - pluginを簡単に作るためのplugin
symfonyで幾つかProjectの開発をしていくと、必ずProject間で共通で利用したいコードが出てくると思います。
その時にplugin化をしたくなるのですが、pluginを開発する上で簡単で手軽にテストコードも準備できる枠組みを提供してくれるのがsfTaskExtraPluginです!
まずインストール
$ symfony plugin:install sfTaskExtraPlugin
これでREADMEに書かれているタスクを利用する事ができるようになりますが、特によく使うのは以下です。
- generate:plugin: pluginのスケルトンを吐き出す
- generate:plugin-module: モジュールを含むpluginのスケルトンを吐き出す
- plugin:package: 作成したpluginをPEARパッケージにしてくれます
symfony の pluginはPEARパッケージで管理しているので、これを使うといちいちpaclage.xmlを作成する必要がなくなります。
まぁそれも便利なのですが、一番素晴らしいのがTDDでの開発がすごくしやすくなることです。
実際にmyPluginを作成してみます。
$ symfony generate:plugin myPlugin
これだけで以下のスケルトンができます。
plugins/myPlugin |-- LICENSE |-- README |-- config | `-- myPluginConfiguration.class.php |-- lib |-- package.xml.tmpl `-- test |-- bin | `-- prove.php |-- bootstrap | |-- functional.php | `-- unit.php |-- fixtures | `-- project | |-- apps | | `-- frontend | | |-- config | | | |-- app.yml | | | |-- cache.yml | | | |-- factories.yml | | | |-- filters.yml | | | |-- frontendConfiguration.class.php | | | |-- routing.yml | | | |-- security.yml | | | |-- settings.yml | | | `-- view.yml | | |-- i18n | | |-- lib | | | `-- myUser.class.php | | |-- modules | | `-- templates | | `-- layout.php | |-- cache | |-- config | | |-- ProjectConfiguration.class.php | | |-- properties.ini | | `-- rsync_exclude.txt | |-- data | | `-- fixtures | | `-- fixtures.yml | |-- lib | | `-- form | | `-- BaseForm.class.php | |-- log | |-- plugins | |-- symfony | |-- test | | |-- bootstrap | | | |-- functional.php | | | `-- unit.php | | |-- functional | | `-- unit | `-- web | |-- css | | `-- main.css | |-- images | |-- js | |-- robots.txt | `-- uploads | `-- assets |-- functional `-- unit
上記を見てわかるとおり、殆どがテストのためのディレクトリ、ファイルになります。
※ plugin:packageをすると上記のテストディレクトリは除外されてパッケージされます。
テストコードの書き方は以下のドキュメントに詳しく書かれていますので、これでいつでもplugin開発ができますね!
5. sfMobileJPlugin - ガラケー対応サイトを作るのなら・・
手前味噌で恐縮ですが、仕事柄ガラケーのサイトを開発することがあるので、ガラケーに特化したpluginを公開しております。
使い方はREADMEにも書いていますが、簡単にご紹介すると、現在公開しているバージョンで出来ることは以下の2つです。
- 通常のテンプレートとガラケー共通テンプレートを分けることが可能
- 個体識別番(imodeID, UID and EZ番号)の制御
- ページ全体、個別でUIDの通知条件の必須を選択することが可能
はい。それだけです。(ぉぃ)
一応それ以外にも細かなUtil classもあったりしますが、backendではNet_UserAgent_Mobileを使用しているので、端末の情報取得系はそちらが使えます。
現在公開準備中ではありますが、絵文字処理、携帯メール処理も上記pluginに含めれるようにコツコツと開発をしております。(^_^;