フランチョスとsymfony
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/01/24(木) 21:26:07ID:???http://www.symfony-project.org/
コードスニペット
http://www.symfony-project.org/snippets/tag
プラグイン
http://trac.symfony-project.com/wiki/SymfonyPlugins
どうぞ つ
0271age
2008/07/29(火) 17:50:14ID:???できました、ありがとうございます。
もう一つ質問させてください。
1.0での
<?php echo select_tag('hoge', options_for_select(array('a', 'b', 'c'), null, array('include_custom' => '選択してください'))) ?>
みたいな選択する配列ではない文字(ここでは選択してください)
をデフォルトで表示するにはどうやって設定するのですか?
0272nobodyさん
2008/07/29(火) 19:15:55ID:???sfWidgetFormSelectを追いかけてみたけど、
include_customに相当する機能はないね。
array(''=>'選択してください')を連結しとくしかないんじゃ?
0273age
2008/07/31(木) 09:43:53ID:???ありがとうございます。
やっぱりできないんですね、仕方ないので言われた通り連結しときました。
FormやMailに関しての参考が少ないのもあるんですけど1.1になって
使い勝手が悪くなったと思うのは俺だけですかね
0274nobodyさん
2008/07/31(木) 14:58:57ID:???保守性はあがるけど、開発効率はさがる。
とくに一人とか少人数でやってる場合。
一人でやってるなら無理にsfForm使わなくて独自orQuickFormとかを使ったほうが
効率はいいんじゃないかな。
0276nobodyさん
2008/07/31(木) 16:41:47ID:???テラ糞フォームwww
0278nobodyさん
2008/07/31(木) 18:44:32ID:???DBの構造とフォームの内容が一致している場合の
手間の少なさは特筆物だけど、
欄Aに入力があったら欄Bを格納、無しなら欄Cを格納、
のように場合わけの必要があると、
とたんに自作ValidatorSchema作らされたりして難しくなるよな。
0280nobodyさん
2008/07/31(木) 19:28:10ID:???Formクラス内に実装しちゃえばいい。
QuickFormなんか使うよりはよっぽど楽。
DBの構造とフォームの内容が一致は大して関係ない。
どちらかというと、フォーム同士の組み合わせが複雑に絡み合うエンタープライズ分野向きだわな。
0281nobodyさん
2008/07/31(木) 19:30:23ID:???0282nobodyさん
2008/07/31(木) 19:40:00ID:???0283nobodyさん
2008/07/31(木) 19:44:40ID:???たしかに理解できてないのかもしらんが、
[×]←チェックボックスA
[ ]←チェックボックスB
「 」←テキストボックスB
[ ]←チェックボックスC
「 」←テキストボックスC
たとえばこんな状況で、
・AがチェックされてなければBやCの状態は問わない
・AがチェックされていたらBまたはCのいずれか一方に少なくともチェックが必要
・BおよびCにチェックが入っている場合のみ、対応するテキストボックスの中身を評価する
こんな記述をしようとしたら、
入力値評価用のバリデータ自作した上で、
ポストバリデータがsfValidatorAndとsfValidatorOrでスパゲッティになるんだが、
漏れが気が付いてないだけで、もっと上手いやり方があるのかい?
0285283
2008/07/31(木) 19:46:41ID:???○・B and/or Cにチェックが入っている場合のみ、おのおの対応するテキストボックスの中身を評価する
0288nobodyさん
2008/07/31(木) 20:00:59ID:???>入力値評価用のバリデータ自作した上で、
要はバリデータスキーマクラスが1個増えるってことだよね?
条件上ごちゃごちゃするのはしょうがないが、バリデータ増やさなくても
isValidやbindオーバーライドしてそこに書いてやれば良くない?
0289283
2008/07/31(木) 20:04:41ID:???sfValidatorSchemaCompareをパクって、
フィールドとオペレータと値を引数に取るバリデータクラスmyValidatorSchemaIfを作って、
$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
$this->validatorSchema->getPostValidator(), // 親クラスのポストバリデータも動くようにするためにAnd
new sfValidatorSchemaCompare('email', sfValidatorSchemaCompare::EQUAL, 'email_confirm',
array(),array('invalid' => 'メールアドレスが一致しません。')
),
new sfValidatorOr(array(
new sfValidatorAnd(array(
new myValidatorSchemaIf('A', myValidatorSchemaIf::EQUAL, 'on', // チェックされている
array(),array('invalid' => ' ')
),
new sfValidatorOr(array(
new myValidatorSchemaIf('B', myValidatorSchemaIf::NOT_EQUAL, '', // チェックされていない
array(),array('invalid' => ' ')
),
new myValidatorSchemaIf('C', myValidatorSchemaIf::NOT_EQUAL, '', // チェックされていない
array(),array('invalid' => ' ')
),
)),
)),
new myValidatorSchemaIf('A', myValidatorSchemaIf::EQUAL, '', // チェックされていない
array(),
array('invalid' => '少なくとも1つをチェックしてください。')
),
)),
)));
テキストボックスの処理が入ってない状態でこうなっちゃうんだけど。
0290nobodyさん
2008/07/31(木) 21:03:55ID:???public function isValid()
{
$r = sfContext::getInstance()->getRequest();
$nf = $this->getWidgetSchema()->getNameFormat();
if($r->getParameter(sprintf($nf, 'A')))
{
if(!$r->getParameter(sprintf($nf, 'B')) and !$r->getParameter(sprintf($nf, 'C')))
{
$r->setError(sprintf($nf, 'A'), "AがチェックされたらBかCもしくは両方をチェックしてください");
$this->isBound = false;
}
}
return parent::isValid();
}
0291nobodyさん
2008/07/31(木) 21:43:21ID:???$this->getErrorSchema()->addError(
new sfValidatorError(
new sfValidatorPass(),"AがチェックされたらBかCもしくは両方をチェックしてください"
)
, 'A');
こっちにするべきか
0292nobodyさん
2008/07/31(木) 22:13:12ID:???0293nobodyさん
2008/07/31(木) 23:01:29ID:???ありがとうございます。
比べて見たら漏れって馬鹿だなってまるわかりだね。
でも4章までしかないフォームガイドじゃさっぱりわからないことだらけで。
0297283=293
2008/08/01(金) 11:00:00ID:???エラーが上手く設定できていません。
parent::isValid()の位置を変えてみたりしたのですが、
通常のバリデータが通過したときだけオーバーライドした内容が評価されているようです。
ttp://groups.google.co.jp/group/symfony-devs/browse_thread/thread/a7a7ad2dd3ae1621
ここを読むと似たような罠にはまっていて、
返事に
「(カスタムバリデータ強制してるのは)再利用性とユニットテストしやすさのためだよ」
と書かれた後にFabienが「限定用途ならバリデータ作らないでsfValidatorCallback使えるよ」
とか書いてるんですが……
やっぱりポストバリデータで書くのが1.1流なんでしょうか。
0298nobodyさん
2008/08/01(金) 11:23:31ID:???0299nobodyさん
2008/08/01(金) 13:01:18ID:???それは無い。動作検証してるし。
逆にsfValidatorCallbackでやると、$this->getValueで値がとれないから無理。
ちょっとコード晒してみなよ。
0300283
2008/08/01(金) 13:56:08ID:???public function isValid()
{
$result = parent::isValid();
print_r($this->getValue('a'));
if($this->getValue('a') == '2') // Aが2かどうか
{
if($this->getValue('b') === '')
{
$this->getErrorSchema()->addError(
new sfValidatorError(new sfValidatorPass(), "bが空欄です。"),'b');
$this->isBound = false;
}
}
else
{
if($this->getValue('c') === '' || $this->getValue('d') === '')
{
$this->getErrorSchema()->addError(
new sfValidatorError(new sfValidatorPass(), "cまたはdが空欄です。"),'c');
$this->isBound = false;
}
if($this->getValue('e') === '' || $this->getValue('f') === '')
{
$this->getErrorSchema()->addError(
new sfValidatorError(new sfValidatorPass(), "eまたはfが空欄です。"),'f');
$this->isBound = false;
}
}
return $result & (0 == count($this->errorSchema));
}
0301283
2008/08/01(金) 13:56:54ID:???parent::isValid()がtrueの場合でないと、
$this->getValue()の値が取得できていないようです。
0302283
2008/08/01(金) 14:14:21ID:???$this->validatorSchema->clean()でsfValidatorErrorSchema例外が起きたら
$this->values = array()されちゃってますね。
bind()にセッション変数に格納した値を渡すような場合もある以上、
getParameter()を使うのも問題があるので、このやり方は使えないようです。
0303nobodyさん
2008/08/01(金) 14:38:20ID:???ていうか、configureでの設定間違えてる。
ソース全体晒すか、sfFormのソースよく読みなおしてごらん。
0304283
2008/08/01(金) 14:56:54ID:???configure()ですか?
propel:generate-crudしたものに
・widgetの追加
・validatorの追加
・setPostValidator()
・setDefaults()
してるくらいです。
先に上げたポストバリデータ方式だと、
動作自体は期待通り動いているので、
バリデータの記述に問題があるとも考えにくいのですが……
0305nobodyさん
2008/08/01(金) 15:17:28ID:???>293のフォームとは違うのですが
とか勝手にフォーム変えて、動かないコードの一部を晒されて、
他人が理解できると思ってるの?
0306283
2008/08/01(金) 16:00:11ID:???なるべく忠実にやってから上手く動かないので、
他のフォームで試行錯誤していたっていう流れだったのですが、
確かにわかりにくかったとは思います。
しかし挙動は同じです。
public function isValid()
{
print_r($this->getValue('A'));
if($this->getValue('A'))
{
if(!$this->getValue('B') and !$this->getValue('C'))
{
$this->getErrorSchema()->addError(
new sfValidatorError(
new sfValidatorPass(),"AがチェックされたらBかCもしくは両方をチェックしてください"
)
, 'A');
$this->isBound = false;
}
}
return parent::isValid;
}
0307nobodyさん
2008/08/01(金) 16:42:35ID:???isValid()はバリデーション結果を返すだけの役目のはず。
isValid()に書くのはお門違いちゃう?
0308nobodyさん
2008/08/01(金) 16:51:42ID:???('A')が顔に見えるww
0309nobodyさん
2008/08/04(月) 12:56:39ID:???0310nobodyさん
2008/08/04(月) 14:55:45ID:???symfony generate:module frontend hoge
再生されるモジュール:
modules/hoge/actions/actions.class
URL:
http://example.com/hoge/index
http://example.com/hoge/poge/index
みたいな下の階層のURLに対するアクションに対応するにはどうすればいいですか?
symfony generate:module frontend hoge/poge
は駄目でした・・・
0311nobodyさん
2008/08/04(月) 15:12:27ID:???0312nobodyさん
2008/08/04(月) 16:13:19ID:???もっと原始的に、
symfony generate:module frontend poge
にして
DOCUMENT_ROOT/hoge/
掘ってindex.php置いて相対位置書き換えるんじゃだめなん?
0313nobodyさん
2008/08/04(月) 16:17:03ID:???railsだと、generate controller hoge/poge
みたいにやると、ちゃんと階層化されたコントローラ(モジュール)ができるんだけど
フランチョス的には階層深くするなってことなのかな。
それならそれでフランチョスの意志に従っても良い気がしてきた。
0314nobodyさん
2008/08/04(月) 19:43:39ID:???mobulea:
url: /modulea/:param1/*
param: { module: modulea, action: index }
moduleb:
url: /moduleb/:param1/*
param: { module: modulea, action: index }
と記述すると、modulebのルーティングルールが呼ばれないんだけど、
どうしたらいいんでしょう?moduleaは呼び出されます。
ちなみに、上の二つを消し、以下のように書き換えると
そのルールすら呼び出されません。
hogemodule:
url: /:module/:param1/*
params: { action: index }
使ってるsymfonyのバージョンは1.0.16です。
ルールの呼ばれる、呼ばれないはdevの画面右上のlogs & msgsで確認してます。
0315314
2008/08/04(月) 20:31:46ID:???ただのyamlの記述ミスでした。
吊ってくる
0316nobodyさん
2008/08/05(火) 09:27:37ID:???ttp://www.thinkit.co.jp/article/71/1/3.html
を見たらISO-2022-JPが上手く動作しないらしいんだけど
他の人はどうしてるんですか?UTF-8を使うんですか?
0317nobodyさん
2008/08/07(木) 17:00:25ID:???0318nobodyさん
2008/08/10(日) 03:35:56ID:zn9kEIVJ各Loggerじゃなくて
それらに指令を出すトップレベルのsfLogger自体をオーバーライドしたい時は
どう書けばいい?
0319nobodyさん
2008/08/10(日) 03:43:09ID:???$data .= "\n\$logger = sfLogger::getInstance();\n";
とハードコーディングしてた・・
ほんと使えないフランチョスだな
0320nobodyさん
2008/08/10(日) 04:21:55ID:???そりゃそうだよな
何か変な実装だもん
0322nobodyさん
2008/08/11(月) 22:25:50ID:jwJ3rV7r具体的にいうと、
http://localhost/hogeProject/web/backend.php/member/edit/id/1
ってなってほしいところが
http://localhost/hogeProject/web/member/edit/id/1
って生成されてる。開発用コントローラからは
http://localhost/hogeProject/web/backend_dev.php/member/edit/id/1
って生成されてるところを見ると、本番用コントローラでなんか設定を忘れてるのかな?
ちなみに、
http://localhost/hogeProject/web/backend_dev.php/member/edit/id/1
を直接入力したらちゃんと呼び出せたので、propel:init-admin自体は多分成功してる。
cache:clearも実行したけど変化なし。
ちなみにWindows XP+XAMPPで実行中。
何が足りないのかな?
0323322
2008/08/12(火) 13:06:13ID:???自己解決。settings.ymlのno_script_nameがonになってた。申し訳ない……。
でもこれ、何個アプリケーション作ろうともデフォルトはonなのな。
0324nobodyさん
2008/08/13(水) 14:28:50ID:ccVg322Yってマンモス本より役に立つ?
0325nobodyさん
2008/08/13(水) 18:51:17ID:???remote_functionでは、引数の配列のwithにパラメータを入れるっていうのが
紛らわしいというか奇妙というか
1.0の話だけど
0326nobodyさん
2008/08/13(水) 23:47:37ID:???/module/action/word/%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
って感じにしたパスをlink_toに渡してリンクを作っていたんだが
link_toがエンコード文字部分を勝手に書き換えてたせいで変なバグに悩まされた ('A`)
0327nobodyさん
2008/08/14(木) 18:22:05ID:???を参考にアップロード処理作ったんだけど、
ローカルでxampp上だとうまく動くのに
サーバー上だとアップロードできない。
$file->isSaved()
もtrue返すのに、、。
アップロードフォルダーのパーミッションも大丈夫だと思うし、
それ以外に気をつける点ってあればどなたかご指摘下さい。
てか、isSaved() が true 返してるが気に入らない。なんで?
0328nobodyさん
2008/08/15(金) 01:40:17ID:YW2vuQsPどうしたらいいですか?
0329nobodyさん
2008/08/15(金) 23:29:09ID:???アドバイスを頂ければ幸いです。
(1)バリデータのエラーメッセージをデフォルトで日本語化することはできないのでしょうか?
(2)メッセージの一部パラメータ化(例:「$a1は$a2文字から$a3文字までの長さで入力してください」)って出来ないのでしょうか?
アクションごとにバリデータのメッセージを設定する方法は検索できました
(ttp://develop.ddo.jp/symfony/book/jp/1.0/validate_form.htmlの「名前をつけたバリデーター」以下の方法で、日本語を設定していけばいいんですよね?)
が、これをアクションごとに記述していくのはやはり手間です。他に方法はないのでしょうか?
0330nobodyさん
2008/08/16(土) 16:52:57ID:z7m75dUv0331nobodyさん
2008/08/16(土) 21:05:40ID:???0332329
2008/08/17(日) 16:02:07ID:IR0jQIbG自己res。今のSymfony1.1では、>>329のやり方って古かったんですね。
今のsfFormなら、少なくとも(2)は出来る事がわかりました。ただし(1)(デフォルトでの日本語化)はまだ方法がわかりません。
まぁ、各バリデータのconfigureだけをオーバーライドしたクラスを作ってしまえばいいのかもしれませんが、なんとなくスマートではない気がしますし、メッセージを管理する場所がバラけてしまうのも少々厄介です。
何か他にいい方法はないでしょうか?
0333nobodyさん
2008/08/18(月) 13:56:03ID:???だったっけ
0334nobodyさん
2008/08/18(月) 16:19:58ID:jvpRje/gsfFormを継承して、configureの後にValidatorSchemaを全部ナメてってsetMessageしてやれば何とかなりそうだけど・・・
これってやっぱ車輪の再発明?
0335327
2008/08/18(月) 17:12:57ID:???サーバーとローカルの構成を変えていたのが原因で、
違う場所に保存されていました。(^^;
0336nobodyさん
2008/08/18(月) 17:25:52ID:???よくあるものならなんでも良かったってことか?電球とかオナホールとか
0337nobodyさん
2008/08/18(月) 19:35:03ID:???0338334
2008/08/18(月) 22:24:47ID:jvpRje/gいちおー出来たっぽいが、誰か見てみる?
Symfonyいじり始めて一週間&実質20行のコードだから、あまり過度な期待はしてもらっても困るけど。
でもこの程度のこと、絶対誰かやってると思うんだけどね。
0339nobodyさん
2008/08/19(火) 19:33:45ID:???0340nobodyさん
2008/08/19(火) 20:41:23ID:8DZ4PLH3form_tagを使った時の遷移先に
?key=valueじゃなく
ルーティングルールを適用させる方法ってある?
0342nobodyさん
2008/08/20(水) 23:33:43ID:LuQqZLWt楽観的ロックって、自分で実装すると結構めんどくさいんだよね。
特に汎用にしようとすると。
0343nobodyさん
2008/08/22(金) 11:58:57ID:Vc/mgEWXttp://www.open-force.info/index.php/blog/show/l/54
公開してまだ一週間だから、信頼性についてはまぁそれなりにってトコだろうけど。
でも、「日本独特の文化ですよね」って断言されるほど、海の向こうじゃマイナーな機能なのか?
0344nobodyさん
2008/08/22(金) 21:23:08ID:fOZ3YS9Puse_helper('javascript')が複数あるとこれになるみたいなんだが、
helperが使われてるか確認する方法ってある?
0345344
2008/08/22(金) 21:30:22ID:fOZ3YS9Puse_helper('javascript')
と
use_helper('Javascript')
がごっちゃになってたからエラーになってたみたいだ
0347nobodyさん
2008/08/23(土) 17:56:23ID:???1.0より洗練されててよいね〜
0348nobodyさん
2008/08/23(土) 21:11:42ID:???1.1とだいぶ違うから買っても使えなそう
フランチョステラ詐欺師www
0350nobodyさん
2008/08/24(日) 04:22:57ID:???0352nobodyさん
2008/08/24(日) 05:21:15ID:???俺とフランチョステラエスパー
0353343
2008/08/25(月) 11:14:01ID:???ふむ、今まであまり気にしてなかったが、言われてみればあまり見た記憶がないな
>海外サイトのユーザー登録での確認画面
外人ってせっかちなのか、それとも画面以外(ex.メールとか)での確認の方を重視してるのか……
まぁ、これ以上はスレ違いか。
0354nobodyさん
2008/08/25(月) 16:51:30ID:???0355nobodyさん
2008/08/26(火) 01:37:54ID:???上記URLを参考にsymfonyを始めたんですが、
http://codezine.jp/article/detail/704?p=4
でhttp://localhost/helloworldにアクセスしても『お名前をどうぞ。』しか表示されません。
ヘルパーが実行されていないようなのですが、何かここがおかしいんじゃないかみたいなのあったら教えて頂けないでしょうか。
環境はvista apache2.2.6 php5.2.4です。
よろしくお願いします。。
0356nobodyさん
2008/08/26(火) 09:25:21ID:???日付を見ると、その記事は間違いなく1.0を対象にした記事。
1.1だと、「use_helper('form')」って書かないとヘルパーは動かない。
1.1だとヘルパー使わずフォームを使うのがフランチョスのお勧め。
sfCompat10を有効にすれば大丈夫だっけ?>ヘルパー
0357356
2008/08/26(火) 11:04:31ID:???詳細は>>3の一番上のリンクの少し下のほう、「symfony Forms in Action」を参照。
0358nobodyさん
2008/08/26(火) 15:28:55ID:C/n8oxtACRIT/ERR/WARNINGのどれ?
エラーじゃねーし
WARNINGだと弱すぎ、CRITだと強すぎな感じで悩む
0359nobodyさん
2008/08/27(水) 14:04:25ID:???リンク先の公式ページで
「何に使うプラグインなんだかワカンネ」
ってコメント付いてるぞwww
2ヶ月くらい前にも確認画面の話題でもめてたよなこのスレ。
0360nobodyさん
2008/08/27(水) 16:47:51ID:???0361nobodyさん
2008/08/27(水) 16:56:19ID:???日本語の中で文字コードが乱立した結果、
確認せずにPOSTすると化けに気が付かないからだろうな。
外人はそんな心配要らないのだから。
日本人の(過度な)慎重さも要因かもしれん。
0362nobodyさん
2008/08/27(水) 17:00:03ID:???アメとかは「ミスがあるのはしょうがない。大事なのははその対応」ってかんじだから。
0363nobodyさん
2008/08/27(水) 17:03:46ID:???admin generatorの削除時のやつと同じように。
0365nobodyさん
2008/08/27(水) 19:45:36ID:???静的ページにする必要はまったく無い
0366nobodyさん
2008/08/27(水) 19:59:54ID:???しかし未だにjs無しの環境で仕事してるやつ居るんだな…
アマゾンの奥地で謎の未開原住民を見た気分だ
0367nobodyさん
2008/08/27(水) 20:58:04ID:???レアケース対応で要求仕様に入ってる事は結構あるんじゃないか?
0368nobodyさん
2008/08/28(木) 00:54:20ID:???0369nobodyさん
2008/08/29(金) 00:26:17ID:???0370nobodyさん
2008/08/29(金) 02:54:24ID:BLGUiryPモジュールをまたがって共通性のある処理ってどこに書く?
一つのモジュール内だけだったら、
actionsに非publicなメソッドを書けばいいけど。
Rubyのmixinがあれば・・・
■ このスレッドは過去ログ倉庫に格納されています