symfony PHPフレームワークpart2
jobeetの日本語はわけわからんな 1.4までは、Fabienのフレームワーク作る勉強にすぎん 本番は2.0からってことで、2.0の日本語ドキュメントでてから始めようかsymfony っていうよりフレームワークを おまいらもうsymfony2で開発しているのかよ? いや〜まだまだ先でしょ。 自分は2年後くらいを想定。 1.4.*を使い続けるよ。積み重ねた実績あるし安定しているしね。 2はだいぶ変わってるから実戦投入は怖い。 戦後教育は文部省と日教組の不毛のイデオロギー対立により本来の教育を蔑ろにし、主役である子供達を放置してきた。最初にその犠牲となっ たのがいわゆる「団塊チルドレン」と呼ばれる世代である。彼らは歪んだ「権利・自由・平等」を教えられ、「責任・義務」を教えられないま まに育った。日教組は彼らに経済と言う物差ししか与える事ができず、信念・哲学・自尊心という価値からは程遠い「金と物」にしか価値を見 出せない貧しい精神を育んだのだ。この事は「失われた十年」と呼ばれる90年代に於ける彼らの生き様に大きく影響した。 子供は幼児期に於いて父性と母性の対比の中で社会性を獲得する。「亭主元気で留守が良い」と言うコピーがはやったが、父性不在の家庭はや がて「団塊チルドレン」の社会性の無さの原因となった。当時オバタリアンと呼ばれた世代は、戦後処理もろくに済んでいないのに平気で海外 へ出かけ、金に飽かせてブランド商品を買い漁り、傲慢さを世界中にまき散らした。彼らの世代に特徴的であるこの品性・品行の悪さは、後の 世代のライフ・スタイルにまで影響を与えた。それ以上に、欧米諸国が未だに日本人を蔑視し、アジア諸国が不信感を持ち続けている事への鈍 感は不幸でさえある。団塊の世代が戦後の営みの中で経済力に見合う人生観や価値観、広義の品性・品行やモラルを獲得していれば日本社会は ここまで歪まなかっただろう。 90年代は「失われた十年」と呼ばれている。経済と言う物差ししか持たなかった我々は、旧来の発想で経済的な豊かさを追求し続けたが故にバ ブルの崩壊をもたらした。その時不幸だったのは「我々は何処へ行くのか?」と言う根源的な迷いに気付かなかった事だ。この事が90年代を無 為に浪費した最大の原因である。団塊の世代は欧米を追う間は素晴らしい能力を発揮したが、追いついた後のビジョンを描く想像力が欠如して いた。彼らの責任では無い。社会が彼らにその様な能力を要求しなかったのだ。村上龍の「あの金で何が買えたか」が売れたと聞くが、悲しい のは未だにその程度の次元でしかバブルを検証できないメンタリティーの低さである。検証すべきは「何故我々が貧しい価値観しか持ち得なか ったのか」と言う事である筈だ。まさしく教育の問題である。冒頭で述べた様に信念・哲学・自尊心を育む努力を怠らなければ、もっと違った 社会があった筈である。 doctrineのモデルについて モデルメソッドを作成するときに通常のクラスにメソッドを作るのか、 ****Tableのクラスにメソッドを作るのか悩みます。 テーブルに展開するようなデータを取得するときに****Tableクラスにメソッドを 作ると聞いたのですが、一件だけ取得するようなものはどちらにメソッドを 加えますか? 生PHPでつまずいたのでフレームワークを検討中です。 質問なのですが、symfonyでフォームからファイルアップロードする場合、 ファイルサイズ20Mとかになっても正しく対応できますか? また、「50Mまで」などの制約をつけることは出来ますか? php.iniってレンタルサーバでも変更できますか? 無理でしょ。 つホスティング or おれおれホスト .htaccessを使う方法とか、いろいろあったんですね。 勉強になりました! memory_limitぢゃなくて、post_max_sizeぢゃないの? upload_max_filesizeという説もあるよ。 post_max_size と upload_max_filesize は、ini_setできないっぽい。。 memory_limit でほんとに動作するの?? 質問ですが、symfonyを使用した場合idカラムって必須ですか? 既存DBを使用する場合ってPKが既に決まっているかと思うのですが、、 idをPKにしなかったら何か不具合とかありますか。 ぐぐると、idを使用しないとConvention over Configurationに反す るとかでてきたのでカラムを追加すべきなんだろうか。。 >>121 必須でもないし不具合もないよ あったほうがそれっぽいってだけ >>121 主キーをxxxx_idではなくidにしなけばならないのかを尋ねているのであれば、>>122 のとおり 主キーは単一カラムで構成させなければならないのかを尋ねているのであれば、複合キーでも問題ないとのこと 後者について、The symfony and Doctrine book(1.2)より引用 --- 識別子によるfind Doctrine_Table::find()メソッドは主キーでレコードを見つけるためにあります。 サロゲートもしくは複合主キーを持つ両方のモデルに対して機能します。 $user = Doctrine::getTable('User')->find(1); $userGroup = Doctrine::getTable('UserGroup')->find(array(1, 2)); ttp://www.symfony-project.org/doctrine/1_2/ja/06-Working-With-Data --- propelはシラネ >>122 ,123 なるほどー。ありがとうございます。助かりました。 Jobeetチュートリアルやってます。 php symfony doctrine:build --all --and-load の説明が、「フォーム、フィルター、モデルを生成し、データベースを削除してからすべてのテーブルを再作成します。」 とありますが、スキーマにカラムを追加しても、実際のDB(MySQL)に反映されません。 先にテーブルのドロップを手作業でやらないといけないのでしょうか? モジュール名を途中で変えたい場合、ちまちまいじって頑張るしかない? 初心者ですいません。 Jobeet見てフォーム作ってみたんですが、入力した日本語が???になってしまいます。 DB(MySQL)はutf8で作って、layoutファイルのlangも'ja'に変えてあります。 コマンドラインでやったらMySQLがオカシイみたいです。 失礼しました! sfConfig::get('sf_upload_dir')が、 内部パスだったり外部パスだったりするのは仕様ですか? キャッシュクリアしたら再現しなくなった。2日ぶりに寝よ。。。。 アクションやコンポーネントをcronジョブやシェルスクリプトから呼び出したい場合は どうすればいいですか? フォームから大きなファイルのアップロードするときに、 プログレスバーを表示したいのですが、 どのようにすれば実現できますか? ちょっといじってみてるんだけど enablePlugins('sfDoctrinePlugin') してると Article とか User とか使いたい名前のフォームを sfDoctrinePlugin\test\functional\fixtures\lib\form\doctrine にロードしに行ってしまう。 これって別の名前使うしかないんですかね? 環境は apache, mod_php 5.3, symfony 1.4.6 です。 Symfony2はもう使えますか? コンソール使えるようになった? Jobeet19日目の、国際化とローカライぜーションをやってるのですが 何度見直しても日本語訳が表示されません。 みなさんはちゃんとできたのでしょうか? あと、messages.xmlを「php symfony i18n:extract」コマンドで更新するたびに 訳した<target>の中身がクリアされちゃうのは仕方ないんですかね。。。 1個追加するだけで、全部やりなおしなのはかなり面倒です。 最新のZendに、Autoloader.phpが含まれてない。。。 検索機能使えなくなっちゃう? Autoloader.phpの場所勘違いしてた>< ちゃんとありました。 ダウンローダーを作ってるのですが、 中身にlayoutの内容が含まれてしまいます。 action内で、viewを無効化すればいいと思っているのですが どうすれば無効化できますか? action内で return sfView::NONE; viewの無効化できました! ネットのサンプルいろいろ見て試していますが、 どうやってもダウンロードじゃなくて、ブラウザ内で開いてしまう。。。 しばらく格闘しそうです。。 いまこんな感じ(説明のためパスチェック等省いてます)なのですが、 IE、FF、Safariでmp3をダウンロードしようとすると、ブラウザ内で開いてしまいます。。。 public function executeDownload(sfWebRequest $request) { $filePath = $request->getParameter('file'); $fileName = 'sound.mp3'; $response = $this->getContext()->getResponse(); $response->clearHttpHeaders(); $response->addCacheControlHttpHeader('Cache-control', 'must-revalidate, post-check=0, pre-check=0'); $response->setContentType('application/octet-stream', true); $response->setHttpHeader('Pragma: public', true); $response->setHttpHeader('Content-transfer-encoding', 'binary'); $response->setHttpHeader('Content-Disposition', 'attachement; filename=' . $fileName); $response->sendHttpHeaders(); $response->setContent(readfile($filePath)); return sfView::NONE; } DBからフィクスチャを作成する方法はありませんか? 日本語訳、ちゃんとでるようになりました。 message.xmlの文字コードがおかしかったようです。 eclipseから見たら化けてて、修正したらきちんと表示されました。 特に文字コードを変えるようなことはした覚えないんだけどね。。。 QuickTimeをインストールすると、mp3がダウンロードできなくなるというオチでした。 すみません、教えてください。 BaseFormDoctrineを継承したformクラスの中で、 getParameter('xxx')を使いたいのですが、 どのようにすればよいでしょうか sfContext::getInstance()->getRequest()->getParameter('xxx') ってやればどこからでも使えるでしょ view.ymlの国際化ってできますか? meta language等を、カルチャーに応じて変えたいんだ。 とりあえずpreExecute()で実装しちゃったけど 他に方法があるなら聞いておきたい。 preExecute()でやると、モジュール増えたとき大変だ。。。 どうやるのが最適解でしょうか? CSRF対策を一時的にOFFにするにはどうすればいいですか? >>156 sfForm::disableCSRFProtection(); 「500 Internal Server Error」ページの上書きってどうやってできますか? /web/errors/error500.phpを設置しても、反映されませんでした。 /config/error/error.html.php に変更されたようです error.html.php の中身を「Test」ってだけにしてみたんだが、 IEだとブラウザの吐く500エラーページになってしまう。。。 FF、Safari、GoogleChromeは問題なかった。 http://support.microsoft.com/kb/294807/ja >HTTP 500 応答の実際のテキストを表示するには、Content-Length を 512 バイト以上に設定する必要があります。 マジキチ JobeetとMore With Symfony読んだんですけど、 ほかにも「これは読んでおけ!」っていうのありますか? >>1 にまとめて書いてほしいけど、次スレは何年後か分かんないもんで>< 分からない > チュートリアル の次は実践だろ。なんか作れよ 作ったけど、もっとコア部分の理解を深めたいと思って。。 >>167 それってソース読むのが一番じゃね?つーか、それに勝るものはないw とりあえずプラグインとか自分で作りたいから。 んで将来的には自分でフレームワークを作りたい。 ソースは時々grepして見てるけど、 もうちょっと全貌というか概略から勉強したいんだよね。 自作FWは設計とかデザパタとかOOとか勉強になる ただ実戦投入してはいけないw ぶっちゃけいまさらFWつくるのに労力費やすのはナンセンス。 PHPのプログラム的セキュリティもFWの流儀に従ってれば、 たいていは問題ない。 それよりFW使って、みんなを楽しませる、おもしろいサービスつくろうぜ! 自分で作ったフレームワークでみんなを楽しませる面白いサービスが作れたら最高ですの いやーそう妄想するのは楽しいけど、結局、何も出来ないまま終わる・・・ 人がやれることは限られてるのだ。時間もね。 symfony freezeってコマンド名変わった?? ひょっとしてsymfonyって、mod_rewriteないと使えない? 使えない事無いけど、mod_rewriteあったほうがかっこ良いURLでサービス出来るね win環境で開発して、本番Linux環境に持っていったんだけど苦戦してます。 freezeしようとしたら「Task "freeze" is not defined.」になったので、tar.gzにしてFTPで送って解凍しました。 Autoloadが、sfDoctrineが見つからないって言ったから、自分でpluginsに SVNでVer1.1とってきたんだけど >Fatal error: Call to undefined method RecordForm::setupInheritance() in /virtual/myname/myproject/lib/form/doctrine/base/BaseRecordForm.class.php on line 47 というエラーがでます。 Ver1.3-2.0も試したけどエラーでした。 どうしたらいいでしょうか。。。 初めてだから、どうすればいいか分からないエラーだらけ。 >Fatal error: Class 'sfValidatorSfCryptoCaptcha' not found Autoloaderがうまく機能してないんかな。。 svnが失敗してディレクトリ構造ぶっこわしてたみたいです。 plugin下を手動で再配置して直りました。 でもまた新しいエラーが。 >500 | Internal Server Error | sfConfigurationException >The route "captcha_refresh" does not exist. ローカルでは動くのに、なんでこんなにエラー出るんだろ。。。 ふぅ。またもsvnがおかしなことしてくれてたぜ。 今度はCaptchaImageがxになるぜ!まったくなんてヤローだ。 Jobeet12日目のアドミンジェネレータ、誰か訳してくれww edit_mode オプションは %%is_activated%% %%JobeetCategory%% - %%company%% (%%email%%) is looking for a %%=position%% (%%location%%) max_per_page: 10 sort: [expires_at, desc] batch_actions: _delete: extend: object_actions: extend: _edit: _delete: ~ actions: deleteNeverActivated: { label: Delete never activated jobs } table_method: retrieveBackendJobList filter: display: [category_id, company, position, description, is_activated, is_public, email, expires_at] form: class: BackendJobeetJobForm display: Content: [category_id, type, company, logo, url, position, location, description, how_to_apply, is_public, email] Admin: [_generated_token, is_activated, expires_at] edit: title: Editing Job "%%company%% is looking for a %%position%%" new: title: Job Creation しょうがなく英語版軽く見てみたけど、日本語訳したやつ適当すぎだろww 前半の説明9割飛ばしてるし、後半も足りねー。 どーりで何度読んでも意味が分からないわけだ。 日本語訳アリは『○』 ○ Backend Creation × Backend Modules × Backend Look and Feel × The symfony Cache × Backend Configuration × Title Configuration × Fields Configuration ○ List View Configuration ○ Form Views Configuration × Filters Configuration × Actions Customization × Templates Customization × Final Configuration ○ Final Thoughts 何度かスキーマ書き換え&Doctrineジェネレータ使っただけで、自分でコードを書いてないのにエラーになる。 >Fatal error: Call to a member function getId() on a non-object in >showSuccess.php on line 5 List,New,Editは問題なし。Showのみエラー。なんででしょう?? キャッシュはクリアしてます。 ccはキャッシュが残ることあるんで、 cacheディレクトリ以下全削除もしました。 モジュール作った後にスキーマ書き換えると、 テンプレートが更新されないのがイヤなので、 module以下のactionとtemplateを削除して 再度モジュール生成、なんてことをしたのがマズかったのかな。。。 もう少し分かってきたことを書きます。 action内では、getId()に成功して正しい値でした。 > public function executeShow(sfWebRequest $request) > { > $this->response = Doctrine_Core::getTable('response')->find(array($request->getParameter('id'))); > $this->forward404Unless($this->response); ># file_put_contents("d:\\debug.txt",$this->response->getId()); > } しかし、テンプレート内でisset($response)するとfalseになります。 > Notice: Undefined variable: response in showSuccess.php on line 8 > > Fatal error: Call to a member function getId() on a non-object in showSuccess.php on line 8 別名でモジュール作り直しても、同様にshowでエラーになります。。。 スキーマの問題でしょうか。。。 >php symfony doctrine:generate-module --with-show > --non-verbose-templates frontend response2 response responseって名前がだめなんじゃね?変数の名前変えてみたら? $this->response = Doctrine_Core::getTable('response')->find(array($request->getParameter('id'))); ↓ $this->resObj = Doctrine_Core::getTable('response')->find(array($request->getParameter('id'))); とか。 テンプレート側も修正が必要になるけど置換一発で行けるでしょ 補足。 action,componentのクラス内で$this->requestと$this->responseはsymfonyが使う既定のプロパティだから、 $this->requestと$this->responseは設定してもビューには渡されないんだ。 参考までに http://trac.symfony-project.org/browser/branches/1.4/lib/action/sfComponent.class.php テーブル名から他の名称まで、responseを別名に変えてうまくいきました! 感謝です!! JobeetJobやってるんですが、カテゴリの表示順を変えるにはどうすればいいでしょうか? sfWidgetFormDoctrineChoiceの中もちょっと見たのですが分かりませんでした。 実運用の時には、「リストの2番目に新しいカテゴリ名を追加したい」なんていう 変更はよくあると思うので、何かやり方はあると思うんですが。。。 メアド欄だけのフォームを作ろうと思っています。 スキーマを作ってDBまで作成するのは大げさだと思うので BaseFormDoctrineを派生させて、自前でフォームを作ろうとしたのですが アクションでnew MyformForm()すると失敗します。 >Fatal error: Class 'Myform' not found in >C:\MyProject\lib\vender\symfony\lib\plugins\sfDoctrinePlugin\lib\form\sfFormDoctrine.class.php on line 39 こうゆうやり方はNGなんでしょうか? とりあえず、テンプレートに手作業でFORMタグ書いて対応しました。 ところで、sfValidatorEmailが、アドレスに「"」「,」「:」「\n」なんかがあっても 許容しちゃうんだけど、みんなこのまま使ってるの?? 俺は怖いから書き換えたけどね。 「new MyformForm()」じゃなくてテンプレート内の「echo $form」で失敗してるようでした。 ひょっとして、モデルも作らないとダメってことですか? 継承元がBaseFormDoctrineだとmodelも必要になりそう。 read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる