symfony

symfony 1.4 + Propel の DBレプリケーションで任意のタイミングでマスタ接続に切り替える

データ更新後はマスタに接続する app.yml all: propel: force_master_flashes: [notice] frontendConfiguration.class.php dispatcher->connect('context.load_factories', array($this, 'loadFactoriesEvent')); } public function loadFactoriesEvent(sfEv…

symfony 1.0, 1.3, 1.4 に対応したzsh補完関数

以前作ったものを、subversionの補完関数とzshの本を参考に一から書き直しました。 1.3 以降の場合はオプションの補完にも対応しています。 一部の処理はグローバル変数にキャッシュさせているので、補完速度が上がっていると思います。 http://github.com/a…

symfony + propel で innodb の SELECT COUNT(*) 対策

http://github.com/aki77/Propel-Behavior/blob/master/AkPropelBehaviorInnodbCount.php デフォルト SELECT COUNT(*) FROM `article` propel behavior 設定後 SELECT COUNT(article.CREATED_AT) FROM `article`

symfony 1.3 で定義されているイベント一覧

grepで抽出してみました。(application.logとcommand.logは除外) symfony 1.x legacy website admin.build_criteria plugins/sfPropelPlugin/data/generator/sfPropelModule/admin/parts/paginationAction.php admin.build_query plugins/sfDoctrinePlugin/d…

symfony 1.3でpeerクラスにdoSelectIteratorメソッドを追加するPropel Behavior

http://github.com/aki77/Propel-Behavior タスク等で大量のレコードに対して処理をするとき、メモリアロケーションエラー防止の為に↓みたいに書いていたのが fetch(PDO::FETCH_NUM)) { $a = new Author(); $a->hydrate($row); // ... } こう書けるようにな…

symfony のスタックトレースのファイルリンクをemacsで開く

公式サイトにはTextMateでの説明しかなかったので、emacsでもできないか試してみました。 mac + Carbon Emacs の組み合わせで動作確認済みです。 スクリーンキャスト .emacsに(server-start)を書いておく。 setteings.ymlにsf_file_link_formatの値を以下の…

symfony1.3のWebデバッグツールバーのDBパネルにExplain結果を表示

symfony 1.3 + propel 1.4 が対象です。http://github.com/aki77/akWebDebugPanelPropel sfWebDebugPanelPropel に以下の表示を追加します。 Explain結果の表示・警告 指定回数以上のクエリが発行された場合の警告 参考サイト 開発環境で自動でSQLにExplain…

symfony 1.3 + Propel 1.4 で MySQLレプリケーション

ProjectConfiguration.class.php dispatcher->connect( 'propel.filter_connection_config', array($this, 'filterConnectionConfigEvent') ); } public function filterConnectionConfigEvent($event, $arguments) { if ($slaves = $event['database']->get…

モデル再構築で余計な更新が発生しないようにする

1.2 に上げたあたりから再構築のたびに、subversionで余計な更新が発生していたので設定見直し。 propel.ini propel.addTimeStamp = false schema.yml created_at: type: TIMESTAMP required: true default: '0000-00-00 00:00:00' # default: 0000-00-00 00…

symfony 1.2のsfTesterResponseクラスを日本語に対応させる

check('/', 'テスト')-> with('response')->matches('/\w+の日記/u'); tester->like( $this->getContent(), '/' . preg_quote($text, '/') . '/u', sprintf('response contains "%s"', mb_substr($text, 0, 4…

symfony 1.2で携帯用にSJISで出力する際の注意点

フィルタでSJISに変換して出力している場合、 view.yml で以下のように設定して default: http_metas: content-type: application/xhtml+xml; charset=Shift_JIS テンプレート内で以下のようにするとタイトルが空になる。 sfWebResponse::fixContentType() …

symfony のキャッシュをcronで削除するときの注意点

拡張子 .php のキャッシュは中途半端に削除されるとエラーになる可能性が高いので除外する。 *.cache のファイルだけ削除するのが無難。 0 4 * * * find DIR/cache -name "*.cache" -mtime +7 -type f -print0 | xargs -0 rm -f

symfony 1.0 〜 1.2 対応の zsh 補完関数

プラグインや独自で作成したタスクにも対応しているつもりです。 公式wiki に掲載されているzsh用とbash用の補完関数を参考に作ってみました。 細かい動作確認はまだなので、色々と不具合があるかもしれません。http://coderepos.org/share/browser/lang/zsh…

sfPropel13Plugin

ざっと試した感じ以下の3点が気になったので、とりあえず動くようにしてみました。 databases.ymlのencoding指定が無視される。 デバッグツールバーにSQLが表示されない。 Propel1.3で正式対応しているReplication設定ができない。

sfZendFilterPlugin

symfonyのvalidate/xxx.ymlでZend_Filterを指定することによって、フォームの入力値を変換できるようになるプラグインを書いてみました。 ↓のような感じで指定できるようになります。 fields: name: required: Yes filters: MbStringTrim: Kana: as StringTo…

sfLDR Server

Livedoor Readerで認証付きフィードとかを気軽に読みたくて、PlaggerLDRを参考に作ってみた。sfldr.zip 特徴 複数ユーザ対応 作るだけ作って自分ではほとんど使ってないので色々問題点とかあるかも XAMPPを使えば解凍するだけで動く? 利用手順 デフォルトで…

sfMixerクラスの簡単な使い方

使用前 myWebResponse.class.php class myWebResponse extends sfWebResponse { public function addFeed($feed) { $this->setParameter($feed, $feed, 'helper/asset/auto/feed'); } } factories.yml all: response: class: myWebResponse 使用後 myWebResp…

sfFeedHelperPlugin

プラグインの仕組みとsfMixerクラスを試したくて、RSS Auto-discoveryヘルパープラグインを作ってみた。 install symfony plugin-install http://www.asahi-net.or.jp/~kr2a-akt/sfFeedHelperPlugin-0.1.0.tgz layout.php <head> </head>

view.ymlでスタイルシートのポジション指定

indexSuccess: stylesheets: [index] default: stylesheets: [main, win_ie_hack: {position: last}]と書くと↓のように読み込まれる。 <link rel="stylesheet" type="text/css" media="screen" href="/css/main.css" /> <link rel="stylesheet" type="text/css" media="screen" href="/css/index.css" /> </link></link>