Doctrineメモ

ぼちぼちDoctrineを使い始めようということで趣味プロジェクトをsymfony1.3+Doctrineで作り始めました。 Doctrineについての知識が全くないので、Propelとの違いなど(初歩的なことから)個人的にメモしていきます。 symfony 1.x legacy website 注)symfony…

fabienさんとのsymfonyツアー&symfony MeetUpに参加しました

9/5(土)のPHPカンファレンスに参加する目的で東京へ遠征し、とても楽しかったのですが、次の日にfabienさんとのツアーがあり、夜にはsymfony meet upということでsymfonyユーザーで集まろうという企画があることをakkyさんのフィードで知りました。 symfon…

sfFormtasticPluginで使用できるウィジェットタイプ

dfltweb1.onamae.com – このドメインはお名前.comで取得されています。 で紹介されているsfFormtasticPluginを使用してYAMLを記述する際に、ウィジェットの種類として使用できるタイプの一覧ですが、sfFormtasticPluginのソース内に記述されています。 http:…

sfFormのレンダリングにカスタムフォーマッタを使用する

symfonyのフォームライブラリsfFormを使ってフォームを表示する場合、フォームの各要素はデフォルトではテーブルの行として以下のようなHTMLタグで出力されます。 <tr> <th><label for="login_login_name">Login name</label></th> <td><input type="text" name="login[login_name]" id="login_login_name" /></td> </tr> フォーマッタは、デフォルトの「table」以外に「list」も用意されています。 …

MySQLでランダムにN件取得する方法のパフォーマンス比較

こちらと同じような比較を自分でもやってみました。 私はMySQLに関してあまり深い知識を持っていないため、検証の方法や設定値の問題などがあるかもしれませんが、ざっくりとした傾向は分かるかと思います。 まず、今回使用しているテスト用環境のバージョン…

symfonyでETag設定を有効にした場合に304応答が返されるように修正

先日調査したsymfonyのキャッシュの挙動まとめ - しんふぉにゃんのエントリに書いた修正点ですが、symfomnyのコードを直接書き換えるのではなく、以下のようにして適用しました。1. sfCacheFilterの派生クラスを作成して、lib配下に保存(ここれはxnniCacheF…

ページキャッシュの不正によるページが真っ白問題ほぼ完結

ページが真っ白になる問題(途中) - しんふぉにゃん ページが真っ白になる問題(中断) - しんふぉにゃん 何度が格闘してあきらめかけていたsymfonyのキャッシュの「ページが真っ白問題」ですが、昨日友人のFakeさんから「HEADリクエストがきたときのキャッ…

symfonyのAdminGeneratorで生成するフォームのカスタマイズでハマった点

symfonyにはschema.ymlで定義したテーブルに対するCRUD関連の画面を一気に生成するAdminGeneratorという機能があり、単純なメンテナンス画面であれば、ほぼこれだけで作れてしまいます。 symfony 1.x legacy website AdminGeneratorで生成した画面も、がんば…

ページが真っ白になる問題(中断)

ページが真っ白になる問題(途中) - しんふぉにゃん この問題ですが、その後再発した折にページに対応するキャッシュファイルを手元で復元してprint_rで確認してみました。すると、sfWebResponseのheaderOnlyが「1」になっていました。headerOnlyが1になっ…

symfonyのprod環境でログを有効化する

settings.ymlでlogging_enabled=onにしただけでは、prod環境ではログは記録されません。Jobeet 23日目:デプロイ の「ロギング」 http://www.symfony-project.org/jobeet/1_2/Doctrine/ja/23 デフォルトでは、prod環境ではロギングは行われません。 ロガーク…

ページが真っ白になる問題(途中)

かなり以前からたまに発生していて、未だに原因を特定できていないのですが、希にページキャッシュから表示したページが真っ白(0バイトのbodyが返ってくる)になる現象があります。本日もこの現象が発生して、その環境でデバッグ情報を埋め込んだところ、sf…

symfonyのキャッシュの挙動まとめ

symfonyのキャッシュについて、設定値の組み合わせによって変わる挙動を調べてみました。 はじめに・キャッシュのいろいろ symfonyで扱うキャッシュにはいくつかの種類があります。 アクションキャッシュ サーバー側。アクションの実行結果がキャッシュされ…

Fixtureを記述し始めるのが面倒なのでテンプレートを出力するタスクを作った

symfonyにはRuby on Rails由来のfixturesというサンプルデータを登録する仕組みがあります。The Definitive Guide to Symfony 16章 http://www.symfony-project.org/book/1_2/16-Application-Management-Tools#chapter_16_sub_fixture_file_syntax →「Fixtur…

dir関数の詳細を調べてみた

dir関数の引数で指定したディレクトリに読み取り権限がなかった場合、falseが返ってくるのですが、この挙動についてPHPのソースを確認してみました。該当するのは、/ext/standard/dir.cです。 (PHP-5.2.9のソースで確認)203行目から、以下のような部分があ…

ExtendedFileManager使用時に読み取り権限のないディレクトリがあるとFatal Errorになる件

とあるシステムのコンテンツ管理画面にWYSIWYGエディタのxinhaを使っており、コンテンツ(PDFやWordファイルなど)のアップロード用にExtendedFileManagerプラグインを有効にしています。 このプラグインで、突然Fatal Errorが出るようになったので調べたと…

symfonyで画像認証を使う(reCAPTCHA)

id:brtRiverさんのエントリ「http://d.hatena.ne.jp/brtRiver/20090412/1239563001」を見て、そういえばプラグインでreCAPTCHAのやつがあった気がしたので、試しに使って見ました。reCAPTCHAは、sfFormExtraPluginの一部として提供されているウィジェット/バ…

複合ウィジェットの値の取得方法

symfonyのsfFormでは、「姓・名」という2つの入力欄を1つのウィジェットとしてまとめて扱うことができます。 このような場合、特定のウィジェットをsfWidgetFormSchemaでまとめたものを1つのウィジェットとして扱います。 同じように、バリデータもsfVali…

AdminGeneratorで生成した一覧画面のフィルタでプルダウンを使う

AdminGeneratorで管理画面を生成すると、スキーマで外部キーを定義しているフィールドは自動的にプルダウンが生成されますが、特にマスターテーブルを用意しないようなコード値を持つフィールドは、「テキスト入力+is empty」入力欄が生成されてしまいます…

sfFormFilterPropel::addNumberCriteria(メモ)

SynfonyのAdminGeneratorで管理画面を生成した時に、リストのフィルタ(検索)クエリの生成に使われる部分http://trac.symfony-project.org/browser/branches/1.2/lib/plugins/sfPropelPlugin/lib/form/sfFormFilterPropel.class.php#L187 getCo…

symfony1.2のAdminGeneratorでid属性を書き換える場合

通常のフォーム(sfForm)で id 属性を変更する場合は、sfForm 継承クラスの setup メソッド内で、ウィジェットのコンストラクタに $attributes パラメータとして id 属性を渡します。 しかし、AdminGenerator で生成したフォームの場合、ウィジェットのコン…

アクションキャッシュを明示的に削除する方法

アクションキャッシュを使用するとアクションのレンダリング結果がキャッシュされるようになりますが、このキャッシュは内部的なデータの更新などには全く依存せず、単に作成された時刻から●秒、という生存期間でキャッシュされます。 しかし、データの更新…

アクションキャッシュを使用する場合にテンプレートではなくアクションから直接出力しているとキャッシュされずにページが真っ白に

まあ当然といえば当然なのですが・・・ cache.yml にてアクションの結果をキャッシュするように設定した場合、厳密には「アクションの処理結果としてレンダリングされたテンプレート」がキャッシュされ、アクションの処理がスキップされるようになります。例…

404ページをカスタマイズする場合の注意

symfonyで404ページをカスタマイズする場合、setting.yml 内の以下の設定を有効にして該当するアクションの出力をカスタマイズします。 #all: # .actions: # error_404_module: default # To be called when a 404 error is raised # error_404_action: erro…

PHP Universal Feed Generatorでタイトルの文字化け対策

http://www.ajaxray.com/blog/2008/03/08/php-universal-feed-generator-supports-rss-10-rss-20-and-atom/ PHPでATOM、RSS1/2フォーマットのフィードが超簡単に吐き出せる「FeedWriter.php」:phpspot開発日誌 PHPSPOT 開発日誌で紹介されていた RSS 出力ラ…

Propelのデータ型

symfony の schema.yml 内に記述できるデータ型は Propel に定義されているものに限られます。 Propel で使えるデータ型は、以下のページの定数一覧で参照できます。http://propel.phpdb.org/docs/api/1.3/generator/propel-engine-database-model/PropelTyp…

symfony1.2では、standard_helpers設定はデフォルトで無効

setting.yml の standard_helpers 設定を有効にするには、sf_compat_10 モードを有効にしないといけない仕様のようです。→http://trac.symfony-project.org/ticket/5259 compat_10: on standard_helpers: [Partial, Cache, Form]

symfony のルーティング処理のダイエット

prod モードではデフォルトで、ルーティングの設定のみでなく、設定から生成される sfRoute クラスでコンパイルを行った状態のインスタンスがシリアライズされ、キャッシュされます。 したがって、prod モードでは実行時のコンパイル処理のオーバーヘッドは…

(?Ppattern)という正規表現について

上で説明した symfony のルーティング処理で、パラメータ名を含むパターンなどがコンパイルされると、「(?Ppattern)」という正規表現になります。この正規表現ですが、マッチしたパターンを後方参照する際に、名前で取り出すための記法です。 Perlの正規表現…

symfonyのルーティング処理の内側(sfRoute)

symfonyでのルーティング処理がどのように行われているのか、ソースを読んでみました。ルーティングの設定は、routing.yml に記述します。 routing.yml に記述した設定は、sfRoutingConfigHandler によってパースされ、キャッシュファイルとして保存されます…

JIS規格でのカタカナ長音表記について調べてみた

symfonyのドキュメント翻訳の校正を少しずつ手伝っていますが、そのプロジェクトの中で「カタカナの表記はJISに合わせようか」というような話がありました。 お恥ずかしながら、これまでJISの表記規格を読んだことがありませんでしたので、この機会に調べて…