WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート symfony

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

symfonyのルーティングシステムをまったく使用していないアプリケーションからモデルなどのクラス郡を強引に使ってみました。


require_once '/path/to/symfony/root/config/ProjectConfiguration.class.php';
$conf = ProjectConfiguration::getApplicationConfiguration('app_name', 'prod', false);
sfContext::createInstance($conf);
これで、sfConfigやオートロードが使えるようになります。本当はpropelのみ使いたかったのですがもっと軽く動かす方法あるんですかね?

まあ、そもそもこの状況に問題があるといえばあるのですが。

なんか、モバイルのエラー処理でフォームに値を戻す時、一部だけ意味不明な文字化けが発生しました。かなりクラスをたどって、詳細に調べてみたのですが原因がまったくわからず、モバイルのみsymfonyを使用しないで作りました。

多分私の作った部分の問題だと思うのですが、時間的な問題もあって・・・


4/25フォーム文字化けの原因に気づきこの作戦は使わない方向にしました。

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

久々の更新です。
作っていたサイトの運営が始まってばたばたしていてなかなか更新できませんでした。
あまり書くねたもなかったし。

DBにカラムを追加することになりちょっとはまりました。
運営が始まってるのでDBをドロップするわけにはいかず、スキーマに追加後


symfony propel-build-model
別途ALTER TABLE ADD COLUMNしたのですが、その際、スキーマでは真ん中辺りに新しいカラムを追加してしまいました。DBの方は当然一番下に足されるのでカラムがずれてhydlateされてしまいました。たしか型がうまく解釈できなければ例外投げたと思うのですが、偶然?そのまま通ってしまい、挙動が少しおかしくなるという結果に。
ちょっと考えればわかるのですがなかなか気づかなくて困りました。

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

GmZendAutoLoaderPlugin


Zend Frameworkのようやクラス名とファイルの場所が一致しているタイプのクラスをオートロードするプラグインを作ってみました。
TheBookの他のフレームワークのコンポーネントと統合するだと、アプリケーション毎に設定を書かなきゃならないので、プラグインにしてみました。

symfony plugin-install http://plugin.gomo.jp/plugins/GmZendAutoLoaderPlugin/GmZendAutoLoaderPlugin-1.0.1.tgz

設定はSF_ROOT/config/settings.ymlに書きます。

all:
.settings:
gm_additional_path: /home/sites/library

複数の場合
all:
.settings:
gm_additional_path:
- /home/sites/library
- /home/sites/PEAR

インクルードパスを通し、なおかつZend_Loader::autoloadのようなautoloderメソッドをspl_autoload_registerします。汎用性のためあえてZend_Loader::autoloadは使わず、プラグイン内に実装してます。
ちょっと試したところ、PAERもうまく読み込めました。(strictエラーがいっぱい出ますが)
インクルードパスを通すのとspl_autoload_registerを登録してるのは別メソッドなのでインクルードパスを通すのに使ってもいいかもしれません。

1.0.1symfonyパッケージの依存バージョンを調整

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

最初にsymfony init-appしたアプリをフロントエンド、2番目以降をバックエンドと呼んでいるようですが、バックエンドのアプリでlink_toなどが生成するURLに


http://www.example.com/app_name.php/module/action
のようにフロントコントローラーのphpがついてしまいますが、これはデフォルトの設定で変えることが可能です。SF_ROOT/apps/app_name/config/settings.ymlにno_script_nameという設定があります。

prod:
.settings:
no_script_name: on
onにしてしまえば消えます。

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

app/config/settings.yml内で


all:
.settings:
escaping_strategy: on
escaping_method: ESC_SPECIALCHARS
全ての変数のエスケーピングをオンにしている時、特定のクラスだけ強制的にエスケーピングをオフに出来ます。

sfOutputEscaper::markClassAsSafe('ClassName');
を呼び出せばそのクラスの返す値はエスケーピングされなくなります。本当にそのクラスをSafe Listに加えてよいのかは難しいところですが。
どこでやるかは迷いますが、クラス内で完結できるので対象クラスのコンストラクタでやりました。

public function __construct(sfPager $pager)
{
sfOutputEscaper::markClassAsSafe(get_class($this));
$this->pager = $pager;
}
複数回実行されるの可能性があるのは微妙ですが、sfOutputEscaperでarray_uniqueが実行されてるので重複されて登録はされないようです。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。