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

WEBアプリケーション研究室 開発ノート 2009年04月

スポンサーサイト

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

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

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

doctrineで環境をdev、ウェブデバッグをtrueにすると画面の上にいろいろな情報が出ますがその中にsymfonyDBiconのアイコンでデータベースへのクエリーログが出ます。
これがある日突然?出なくなってました。
いろいろ試したところpropelのプラグインがONになっていると出ないようです。


class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
// for compatibility / remove and enable only the plugins you want
$this->enableAllPluginsExcept(array('sfCompat10Plugin'));
}
}
としていたところを

class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
// for compatibility / remove and enable only the plugins you want
$this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin'));
}
}
で出るようになりました。同時に使うなと・・・まあ、そりゃそうでしょうよ。でも、例外でも投げてくれればいいのに。
[symfony 1.2.6]

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

モバイルでフォームに日本語の値を戻すときに文字化けが発生しました。
モバイルの文字コード変換は自家製のフィルタでやっていました。resuestのParameterHolderの中身にをUTF-8に変換し、処理後、すべてのrespose contentsをShift_JISに変換していました。一部抜粋するとこんな感じです。


public function execute($filterChain)
{
$response = $this->getContext()->getResponse();

if ($this->isFirstCall())
{
$agent = GmAgentMobile::getInstance();
if($agent->isDoCoMo())
{
$response->setContentType('application/xhtml+xml; charset=Shift_JIS');
}
else
{
$response->setContentType('text/html; charset=Shift_JIS');
}

$ph = $this->getContext()->getRequest()->getParameterHolder();
foreach($ph->getAll() as $key=>$value)
{
$ph->set($key, $this->convertEncoding($value, 'UTF-8', 'SJIS'));
}
}

$filterChain->execute();

$contents = $response->getContent();

$response->setContent(mb_convert_encoding($contents, 'SJIS', 'UTF-8'));

}
で問題はフォームに値をbindするときに

$this->form = new JobSearchMobileForm();
$this->form->bind($request->getGetParameters());
としていたのですが、getGetParametersはrequestのParameterHolderからではなく$_GETの値を別に保持していてそれを返していたのです。つまりShift_JISの値がそのまま入っていました。で、フィルターでもう一度Shift_JISに変換していたので文字化けしていたのです。
フォームにbindするところを

$this->form = new JobSearchMobileForm();
$this->form->bind($request->getParameterHolder()->getAll());
に直したら文字化けしなくなりました。ParameterHolderにGETかPOSTかの区分けが無いのだからgetGetParametersとgetPostParametersは別のところから取ってきてるのは考えればわかるのですが、なかなか頭がそっちに向かず結構はまってしまいました。

モバイルはsymfonyを使わずに作り直しかけてました。OTZ
あー、テンプレも他チームにやってもらっちゃったんだよな・・・月曜にsymofnyに戻す話をしなきゃ・・・

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

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]

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

久々にZend Framworkをいじる機会があって、忘れていたのですが
ルートの設定で、symfonyは最初にマッチしたルートが採用されるのに対して、Zend Framworkは最後にマッチしたルートが採用されます。

だから汎用的なルートはsymfonyの場合は最後のほうに書いて、Zend Framworkは最初のほうに書かないとだめです。

個人的な感覚の問題かもしれないけどsymfonyの方が直感的な気がします。

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

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

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


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

[symfony 1.1.6]

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