フランチョスと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
どうぞ つ
0229nobodyさん
2008/07/14(月) 11:00:59ID:???少なくともこのスレと前スレを読み返した範囲では、
どこを探しても1.1のフォームフレームワークで確認画面をどう実現するか、
という話題は見当たらないんだが。
前スレ934はフォームヘルパ使っているからcompat_10モードだよな?
「解決された」と言い切れるほど自信があるならポインタくらい示せよ。
0230nobodyさん
2008/07/14(月) 11:24:38ID:???0231nobodyさん
2008/07/14(月) 11:32:13ID:x4hcg1ovHTMLQuickFormを使いたいってんならその画面でHTMLQuickFormを使えばいいだけだと思うんだが・・・
何が不満なんだい?
0232nobodyさん
2008/07/14(月) 12:00:50ID:???なんでこのスレなんか見てるの?その前にまず公式のドキュメント見ればわかるだろ…
あんなにでかでか書いてあるのにポインタ示せとか、盲目すぎ
0233nobodyさん
2008/07/14(月) 12:13:15ID:???0234nobodyさん
2008/07/14(月) 12:44:18ID:???今ざっとコードを見てみたんだが freeze() にあたる処理を入れる余地はないなこれ
あるタイプの Widget はそれ本来のタイプの HTML 出力をする機能しかないわけだから
sfForm(を extends したユーザフォームクラス)のレベルで
入力画面用の Widget と確認画面用の Widget を切り替えるような仕組みを作る必要があるのかな……?
いま公式ドキュメント読みつつ脱線して fabien が sfForm の MVC 適合を解説してるブログとか読んでるところだけど
手間を省くためにも >>232 がでかでか書いてある箇所の URL を挙げてくれるとありがたい
0235nobodyさん
2008/07/14(月) 12:51:42ID:???>>231がsfForm使ってないのに適当に答えてるらしいことはよくわかった。
0236nobodyさん
2008/07/14(月) 13:21:01ID:Bo+zcAFi慣れれば便利そうなんだが
他のFWもこんな感じ?
0237nobodyさん
2008/07/14(月) 13:27:46ID:???それ今のお前まんまじゃんw
もっとよく読め。
0238nobodyさん
2008/07/14(月) 13:32:55ID:???Thank You Pageにあたる部分にsetFlashを使ったアクションを一枚噛ませれば良い。
そして最後にgetFlashして登録
0240nobodyさん
2008/07/14(月) 15:43:56ID:x4hcg1ovもし、HTMLQuickFormを念頭に置いて文句を言ってるんだとしたら、たぶん、こういう事でないかな?
「HTMLQuickFormとsymfonyではパラダイム自体が違う。」
確か、HTMLQuickFormだと
if (なんたら) {
formの処理
} else {
formのフリーズ
}
フォームの出力
という感じのコードになったと思うが、symfonyだと、そもそも分岐自体をFWが受け持ってしまっている。
ので、ワカランと言ってるのではないか?と思う。
>>236
他のFWも覚える事は多いだろうと思う。
というか、FWは、FWだけ覚えればOKっていうもんじゃなくて、あくまでPHP+FWだからな。
PHPがまともに使える(それこそFW使わんでも同じだけの機能を作れる)ような人が、楽できるように出来てるもんなんだ。
今までPHPを勉強してなくてFWから勉強する・・・は、止めた方がいいだろうな。
(もし、そういうつもりで言ったのでなかったとしたらスマン。)
0241nobodyさん
2008/07/14(月) 16:16:59ID:???0242nobodyさん
2008/07/14(月) 16:33:30ID:???現場の話なら現場の話って最初から言え、っつーか、後だしで条件出してくるんじゃねぇよ。
0243nobodyさん
2008/07/14(月) 19:25:18ID:???リロードされて消えるからいいんじゃん。
消えたら登録せずにエラー出せばよい。
リロードでの連投許可するってなら別だけどね。
ぎゃくにquickformだとhiddenだからバリデーション2回走らせたり効率悪すぎるだろ?
0244nobodyさん
2008/07/15(火) 12:18:49ID:???0245nobodyさん
2008/07/15(火) 12:21:34ID:???symfony1.1 + compat10
動的に個数が変わる
data[0][aaa]
data[0][bbb]
data[1][aaa]
data[1][bbb]
data[2][aaa]
data[2][bbb]
のような、3次元配列のバリデーションはどうやればいい?
validateXXX()メソッドでゴリゴリやるしかない?
0248nobodyさん
2008/07/15(火) 22:05:00ID:???escapingOutputもパクリ元のRailsにないし
symfonyもまぁまぁがんばってるね
0249nobodyさん
2008/07/15(火) 22:41:00ID:???こっちで質問させてください。
symfony1.1をちょっと触ってみようと思いテストしたのですが、
%PEAR_DIR%\phing\Phing.php
内の printVersion() は、 static なのに
%PEAR_DIR%\symfony\plugins\sfPropelPlugin\lib\task\sfPhing.class.php
では、上記 phing/Phing を継承しているにもかかわらず
printVersion() をただの function として定義しているため
symfony propel:build-model などで
Cannot make static method Phing::printVersion() とエラーが出ます。
sfPhing.class.php 内の printVersion() を static にすれば解決はするんですけど、
正しくは、どうすればよいのでしょうか?他の方はエラー出てませんか?
ちょっと気持ち悪いので、どなたか教えてください。
Phingのバージョンは最新だと思っています。 @version $Revision: 1.51 $
0250249
2008/07/16(水) 09:13:54ID:???通常の pear とsymfony にバンドル版とでソースが違ったようです。
pear のものを uninstall したら動くようになりました。
0251nobodyさん
2008/07/16(水) 11:18:16ID:???0252nobodyさん
2008/07/16(水) 11:20:57ID:???0253nobodyさん
2008/07/16(水) 11:21:50ID:???0256nobodyさん
2008/07/16(水) 19:22:49ID:???クラス定数を書かなくていいので楽だよ。
でも、使おうと思ったらどんなORMでも使えるよね。
0257nobodyさん
2008/07/16(水) 20:01:51ID:???0258nobodyさん
2008/07/17(木) 01:53:41ID:r8Tb5l59C++,C#覚えてた方が無駄じゃないよな
0259nobodyさん
2008/07/17(木) 09:27:50ID:r8Tb5l59また新しい超人気のFWが登場するだろうw
短期で習得しないと回収できないよ、この業界はね
0260nobodyさん
2008/07/17(木) 10:55:21ID:???symfonyを勉強しておくのもCを勉強おくのと同じくらい役に立つが
とりあえずCを勉強しておけ。
0261nobodyさん
2008/07/17(木) 13:50:12ID:???C++
C#
C
そして、いよいよsymfonyの出番だ!
おかしくね?
0262nobodyさん
2008/07/17(木) 19:13:50ID:6/yjc+ozCってのはどっちかというと、コンピュータ(ハード側)に則した言語なんだ。
考え方が異質だけと単純。
それに対して、PHPとかsymfonyになってくると人間側の「もっと簡単に、省ける事は空気読んで省けいて書けた方がいいよね」になってくるんだよ。
その為、見た目は簡単だけど、複雑になってる訳。
単純な方から複雑な方へ勉強していった方が理解が早い・・・はずだと思うんだ。
0263nobodyさん
2008/07/17(木) 22:47:02ID:???あんな欠陥言語は早いとこ絶滅させないと
0264nobodyさん
2008/07/17(木) 23:47:00ID:???0265nobodyさん
2008/07/18(金) 10:09:26ID:???なぜ、そう考えるのかは分かるんだが・・・
もし、C++を理解しながら、ありゃダメだって思ってるんなら、一度boost::spiritとかいじってみるといいかもよ?
言語というより、パズルとして楽しめるw
0266nobodyさん
2008/07/18(金) 20:46:09ID:???auto_ptrとその仲間の機能をすべて答えなさい。
とかやったら輪ロスすぎるww
0267nobodyさん
2008/07/18(金) 22:11:51ID:???0268nobodyさん
2008/07/25(金) 12:10:11ID:???選択項目をタグ単位では取り出せない仕様なんですか?
ラジオボタンによくある
◎個人
苗字[ ]名前[ ]
◎法人
法人名[ ]
担当者名[ ]
みたいなものを実装したいのです。
個人/法人区分じたいもDBに保存したいので、
フォームクラスとは別に生成するわけにも行きませんし……
横並びと縦並びになる場合は自作のformatter()関数を作って対処したのですが、
これもデフォルトではulタグ前提になっていて、なんか不便ですよね。
0269age
2008/07/28(月) 21:14:47ID:L1kOSCp5sfWidgetFormSelectのselectedの指定って
どうやってやるんですか?
ググっても見つからないんで1.1使ってる人教えてください
0270nobodyさん
2008/07/29(火) 13:28:16ID:???アクションクラスで
$this->form->setDefault('name', 'value');
したら自動で入らない?
フォームクラスでsetDefaults([連想配列A])して
アクションクラスでもsetDefaults([連想配列B])していたら、
Bだけが有効になるっていうハマりがあったな。
sfFormの定義を見たら、
setDefault()は$nameと同じ要素だけ上書きしているが、
setDefaults()だとマージしないで配列ごと上書きしていた。
自前でgetDefaults()してからarray_merge()するか、
setDefault()使っとくか。
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どうしたらいいですか?
■ このスレッドは過去ログ倉庫に格納されています