トップページphp
511コメント153KB

symfony PHPフレームワークpart2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/17(水) 00:34:44ID:???
前スレ
フランチョスとsymfony
http://pc11.2ch.net/test/read.cgi/php/1201177567/

1.x系公式
http://www.symfony-project.org/

symfony reloaded(2.0) まだプレビュー版
http://symfony-reloaded.org/
0168nobodyさん2010/09/15(水) 16:26:35ID:???
なんのために?
0169nobodyさん2010/09/15(水) 18:06:19ID:???
>>167
それってソース読むのが一番じゃね?つーか、それに勝るものはないw
0170nobodyさん2010/09/15(水) 21:29:28ID:???
とりあえずプラグインとか自分で作りたいから。
んで将来的には自分でフレームワークを作りたい。
0171nobodyさん2010/09/15(水) 21:31:04ID:???
ソースは時々grepして見てるけど、
もうちょっと全貌というか概略から勉強したいんだよね。
0172nobodyさん2010/09/16(木) 00:39:38ID:???
自分でフレームワークとか四角い車輪すぎるだろ
0173nobodyさん2010/09/16(木) 02:56:34ID:???
自作FWは設計とかデザパタとかOOとか勉強になる
ただ実戦投入してはいけないw
0174nobodyさん2010/09/16(木) 07:09:09ID:???
あとセキュリティ方面の知識も身につくな
0175nobodyさん2010/09/16(木) 10:49:36ID:???
ぶっちゃけいまさらFWつくるのに労力費やすのはナンセンス。
PHPのプログラム的セキュリティもFWの流儀に従ってれば、
たいていは問題ない。
それよりFW使って、みんなを楽しませる、おもしろいサービスつくろうぜ!
0176nobodyさん2010/09/16(木) 14:57:27ID:???
自分で作ったフレームワークでみんなを楽しませる面白いサービスが作れたら最高ですの
0177nobodyさん2010/09/16(木) 21:53:53ID:???
いやーそう妄想するのは楽しいけど、結局、何も出来ないまま終わる・・・
人がやれることは限られてるのだ。時間もね。
0178nobodyさん2010/09/17(金) 03:31:33ID:???
symfony freezeってコマンド名変わった??
0179nobodyさん2010/09/17(金) 21:38:18ID:???
ひょっとしてsymfonyって、mod_rewriteないと使えない?
0180nobodyさん2010/09/17(金) 22:53:40ID:???
使えない事無いけど、mod_rewriteあったほうがかっこ良いURLでサービス出来るね
0181nobodyさん2010/09/18(土) 19:35:38ID:???
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も試したけどエラーでした。

どうしたらいいでしょうか。。。
01821812010/09/18(土) 19:55:07ID:???
初めてだから、どうすればいいか分からないエラーだらけ。
>Fatal error: Class 'sfValidatorSfCryptoCaptcha' not found
Autoloaderがうまく機能してないんかな。。
01831812010/09/18(土) 20:33:10ID:???
svnが失敗してディレクトリ構造ぶっこわしてたみたいです。
plugin下を手動で再配置して直りました。

でもまた新しいエラーが。
>500 | Internal Server Error | sfConfigurationException
>The route "captcha_refresh" does not exist.
ローカルでは動くのに、なんでこんなにエラー出るんだろ。。。
01841812010/09/18(土) 21:54:41ID:???
ふぅ。またもsvnがおかしなことしてくれてたぜ。

今度はCaptchaImageがxになるぜ!まったくなんてヤローだ。
0185nobodyさん2010/09/26(日) 21:30:28ID:???
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
0186nobodyさん2010/09/26(日) 21:44:33ID:???
しょうがなく英語版軽く見てみたけど、日本語訳したやつ適当すぎだろ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
0187nobodyさん2010/09/26(日) 21:55:28ID:???
Ver1.2にしたら出てきた!
0188nobodyさん2010/09/28(火) 01:01:17ID:???
何度かスキーマ書き換え&Doctrineジェネレータ使っただけで、自分でコードを書いてないのにエラーになる。
>Fatal error: Call to a member function getId() on a non-object in
>showSuccess.php on line 5

List,New,Editは問題なし。Showのみエラー。なんででしょう??
0189nobodyさん2010/09/28(火) 16:06:48ID:???
./symfony cc
0190nobodyさん2010/09/28(火) 17:21:48ID:???
キャッシュはクリアしてます。
ccはキャッシュが残ることあるんで、
cacheディレクトリ以下全削除もしました。
0191nobodyさん2010/09/28(火) 17:27:27ID:???
モジュール作った後にスキーマ書き換えると、
テンプレートが更新されないのがイヤなので、
module以下のactionとtemplateを削除して
再度モジュール生成、なんてことをしたのがマズかったのかな。。。
0192nobodyさん2010/09/28(火) 18:41:32ID:???
もう少し分かってきたことを書きます。
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

0193nobodyさん2010/09/28(火) 18:53:05ID:???
別名でモジュール作り直しても、同様にshowでエラーになります。。。
スキーマの問題でしょうか。。。

>php symfony doctrine:generate-module --with-show
> --non-verbose-templates frontend response2 response
0194nobodyさん2010/09/28(火) 19:46:03ID:???
responseって名前がだめなんじゃね?変数の名前変えてみたら?

$this->response = Doctrine_Core::getTable('response')->find(array($request->getParameter('id')));

$this->resObj = Doctrine_Core::getTable('response')->find(array($request->getParameter('id')));
とか。
テンプレート側も修正が必要になるけど置換一発で行けるでしょ
01951942010/09/28(火) 19:48:24ID:???
補足。
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
0196nobodyさん2010/09/28(火) 21:50:40ID:???
テーブル名から他の名称まで、responseを別名に変えてうまくいきました!
感謝です!!
0197nobodyさん2010/09/29(水) 00:57:50ID:???
JobeetJobやってるんですが、カテゴリの表示順を変えるにはどうすればいいでしょうか?
sfWidgetFormDoctrineChoiceの中もちょっと見たのですが分かりませんでした。

実運用の時には、「リストの2番目に新しいカテゴリ名を追加したい」なんていう
変更はよくあると思うので、何かやり方はあると思うんですが。。。
0198nobodyさん2010/10/03(日) 23:41:03ID:???
メアド欄だけのフォームを作ろうと思っています。
スキーマを作って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なんでしょうか?
01991982010/10/04(月) 01:35:50ID:???
とりあえず、テンプレートに手作業でFORMタグ書いて対応しました。

ところで、sfValidatorEmailが、アドレスに「"」「,」「:」「\n」なんかがあっても
許容しちゃうんだけど、みんなこのまま使ってるの??
俺は怖いから書き換えたけどね。
02001982010/10/04(月) 16:19:34ID:???
「new MyformForm()」じゃなくてテンプレート内の「echo $form」で失敗してるようでした。

ひょっとして、モデルも作らないとダメってことですか?
0201nobodyさん2010/10/04(月) 17:08:59ID:???
継承元がBaseFormDoctrineだとmodelも必要になりそう。
0202nobodyさん2010/10/04(月) 17:35:35ID:???
BaseFormからextendして、DBに何か保存するならsaveメソッドの中で直接何か書きなはれ
0203nobodyさん2010/10/05(火) 18:10:52ID:???
sfValidatorSchemaCompare も sfValidatorEmail等 も、バリデート失敗時は「Invalid」が表示されますよね。
普通は国際化して、「入力が正しくありません」などに変えると思います。
新規登録画面でパスワードを2回入力させて、そのチェックに sfValidatorSchemaCompare を使っているので、
失敗時には「入力が正しくありません」じゃなくて「パスワードが一致しません」にしたいんです。
なんとかエラーメッセージを区別できないもんでしょうか?

ソースを見た感じ、"throw_global_error"オプションを設定して、自分でcatchしてハンドリングすればできそうな気もしているのですが
どこでどうハンドリングすればいいのか分かりません。
sfValidatorSchemaCompare.class.phpの117行目の「$error = new sfValidatorError($this, 'invalid', 」の
'invalid'を書き換えればひとまず対処できますが、sfValidatorSchemaCompare を他の用途で使うときに
適切でないエラーメッセージになってしまうので、ソースを直接いじるのは遠慮したいです。

どのように対処すればよいでしょうか?
02042032010/10/05(火) 18:40:45ID:???
コンストラクタの$messageで変更できました。
長々と失礼しました。
0205nobodyさん2010/10/06(水) 15:21:59ID:???
コアを書き換えるなよ・・・
0206nobodyさん2010/10/07(木) 10:02:16ID:???
今更知ったけど、netbeansってsymfony対応してたんだな

http://netbeans.org/features/php/index_ja.html
http://netbeans.org/images_www/v6/9/screenshots/php.png
0207nobodyさん2010/10/08(金) 20:05:54ID:vQ/FE4Nt
コマンド実行が楽そうやね。
次のプロジェクトはNetbeansで作ってみるかな。
0208nobodyさん2010/10/08(金) 20:09:07ID:vQ/FE4Nt
Eclipseでやると、別窓でコマンド叩く用のシェルと自前のチートシートをエディタで開いてないとダメで、
スキーマ書き換えると、lib下やらをリフレッシュしないといけないから
毎度毎度面倒なんだよね。
0209nobodyさん2010/10/08(金) 23:30:00ID:???
コマンドはExternal Toolsでいいだろ
0210nobodyさん2010/10/09(土) 01:22:13ID:???
ExternalToolsはリフレッシュもしてくれるんだねぇ。便利。
php symfony doctrine:build --all --and-load --no-confirmation
php symfony doctrine:data-load
php symfony cc
このへんはいけるけど、
symfony generate:module frontend hoge
なんかは対応できないよね?
スレチだけど。
0211nobodyさん2010/10/09(土) 08:43:14ID:???
>>210
${string_prompt}
0212nobodyさん2010/10/09(土) 16:33:33ID:???
便利すぎるだろ。。。
0213nobodyさん2010/10/10(日) 04:23:44ID:???
自前で簡易キャッシュ機構作りたいんですけど、
レイアウト有り/無しのhtmlをファイルに保存するにはどうしたらいいですか?
wgetで取って保存、ってのは無しでお願いします。
0214nobodyさん2010/10/10(日) 10:25:22ID:???
それは自前で作るじゃなくて作ってもらうって言うんだ
0215nobodyさん2010/10/10(日) 17:54:56ID:???
いや、ヒントだけでよかったんだよ。
いま開発環境ないPCだけど、Renderフィルター覗けばなんか分かりそうな気がしてきた。
0216nobodyさん2010/10/10(日) 19:46:16ID:???
forward404Unless()で404エラーページに飛んだとき、
prod環境でも第2引数を画面に表示するにはどうすればいい?
0217nobodyさん2010/10/10(日) 21:13:44ID:???
初心者ですいません。
Table:
columns:
id:
name:
のように定義した状態で、
executeCreate内でnameフォームの値を取得するのに「$request->getParameter('name')」や「$form['name']->getValue()」
としてみたのですが、値が取得できません。
フォームの値を取り出すにはどのようにやればいいのでしょうか?
02182172010/10/10(日) 22:15:33ID:???
$requestArray = $request->getParameter($form->getName());
$requestArray['name']

で取得できたんですけど、毎回こうやらないとダメなんでしょうか(汗)
0219nobodyさん2010/10/11(月) 00:09:02ID:???
leftJoin時のSQL発行回数について質問です。
SQL1回の発行で済ませて欲しいのに、2回実行されているようです。
なぜでしょうか?

#schema.yml
User:
 columns:
  id:
  name:
 Thread:
  local: id
  foreign: user_id
  type: many

Thread:
 columns:
  id:
  user_id:
 relations:
  User:
   local: user_id
   foreign: id
   type: one

0220nobodyさん2010/10/11(月) 00:10:20ID:???
#action.class.php
public function executeIndex(sfWebRequest $request)
{
 $this->thread = Doctrine_Core::getTable('thread')
  ->createQuery('t')
  ->where('t.id',$request->getParameter('id'))
  ->leftJoin('t.User u')
  ->execute();
}

#indexSuccess.php
お名前は<?php echo $thread->getUser()->getName() ?>

似たような話題で、http://blog.asial.co.jp/591 も見てみたのですが、
バージョン違いなのか全く動きませんでした。
0221nobodyさん2010/10/11(月) 01:17:59ID:???
>>220
 $this->thread = Doctrine_Core::getTable('thread')
  ->createQuery('t')
  ->where('t.id',$request->getParameter('id'))
  ->leftJoin('t.User u')
  ->execute();

 $this->thread = Doctrine_Core::getTable('thread')
  ->createQuery('t')
  ->where('t.id = ?',$request->getParameter('id'))
  ->leftJoin('t.User u')
  ->fetchOne();

に変えたらどう?
0222nobodyさん2010/10/11(月) 02:17:36ID:???
fetchOne()に変えて、$thread['User']['name'] で取得できました!
SQLも新しく発行されていないようです。
ただ、$thread->getId() の構文が使えなくて $thread['id'] に全部書き換えないといけませんけど><
0223nobodyさん2010/10/11(月) 02:55:20ID:???
サンプルに合わせて言い方変えちゃいましたけど、
実際はfetchArray()で取得して、foreach()でループさせました。
とりあえずうまく行ったようです。
0224nobodyさん2010/10/11(月) 20:37:48ID:???
$form->isValid()に失敗したとき、失敗の内容はどうやって取得できますか?

具体的には、CSRFチェックに引っかかったとき、自動的にhoge/newにリダイレクトさせたいんです。
0225nobodyさん2010/10/12(火) 00:52:35ID:???
>>224
sfErrorSchemaにでも、入ってるんじゃないの?

$form->getErrorSchema()だったかな?
0226nobodyさん2010/10/13(水) 20:37:10ID:???
特定のユーザーを、強制ログアウトさせるにはどうすればいいですか?
0227nobodyさん2010/10/14(木) 10:37:08ID:???
>>226
myUserの初期化メソッドで通常の処理の後にIDみて強制ログアウトする処理を足す。
0228nobodyさん2010/10/14(木) 17:05:40ID:???
>>227
すいません、そうゆう意味じゃないです。
たとえば、管理者が荒らし行為真っ最中のユーザーを見つけたら、
そいつのセッションやらクレデンシャルやらをクリアしてログアウトさせることをイメージしてました。

セッションにユーザーIDを入れておき、
全セッションファイルをトラバースして、
「id|i:(\d)+:123;」みたいにマッチしたファイルを削除すればいいかな?
symfony関係なくなっちゃうけど。。。
0229nobodyさん2010/10/14(木) 17:34:03ID:???
Doctrineで書いたコードの、selectがうまく反映されません。
count()をやめて、execute()にして返ってきたDoctrineCorectionをcount()すると正しい件数が取得できます。
でも重いので、SQLのcount()でなんとか処理したいです。

public static function getLoginDays($id)
{
 return LoginTable::getInstance()
  ->createQuery('l')
  ->select('DATE_FORMAT(l.created_at,"%Y-%m-%d") as days, count(*) as num')
  ->where('l.user_id = ?',$id)
  ->groupBy('DATE_FORMAT(l.created_at,"%Y-%m-%d")')
  ->orderBy('days')
  ->count();
}

#symfonyが発行したSQL
SELECT COUNT(*) AS num_results FROM log l WHERE l.user_id = '1' GROUP BY DATE_FORMAT(l.created_at, "%Y-%m-%d");

結果、日付の区別無しに、ログの総数が返ります。
0230nobodyさん2010/10/14(木) 17:44:03ID:???
恥ずかしいミスした!
DoctrineCorectionは、DoctrineCollectionの間違いでした^^;
0231nobodyさん2010/10/14(木) 19:07:30ID:???
>>228
それならis_active int(1)とかでフラグ項目をDBのユーザーテーブルに持たせておいて、公開側では
myUserの初期化で$dbuser->getIsActive()の値を調べて強制ログアウトさせればいいんじゃない?
強制ログアウトさせたいユーザーは、管理者が裏画面からis_activeの値を更新して強制ログアウト側に
落とす。

username password is_active
02322312010/10/14(木) 19:08:38ID:???
ごめん、途中送信。

username password is_active
testuser ****** 1     ⇒ログインできる
nguser ****** 0     ⇒ログインできない&強制ログアウト
0233nobodyさん2010/10/14(木) 20:07:47ID:???
myUserにコンストラクタ定義すると、深い迷路に迷い込めそうな予感。。。
02342292010/10/15(金) 17:53:24ID:???
ちょっと語弊がありました。
グループ化された日付が1つだけの場合、グループ化されていないままのレコード総数が返ります。
日付が複数の場合、正しい値が返ります。
0235nobodyさん2010/10/15(金) 17:59:07ID:???
分かったら当たり前だけど、myUserのコンストラクタは

 public function __construct(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array())
 {
  parent::__construct($dispatcher, $storage, $options);
 }

って書かないとダメなのね。__construct()とだけ書いてちょっと泥沼になった。
0236nobodyさん2010/10/15(金) 18:25:07ID:???
テンプレート内でvar_dump()すると、指定した変数以外もすんごい量がダンプされるんですけど
$thisとかも見に行ってるんですか??
0237nobodyさん2010/10/15(金) 21:08:43ID:???
>>236
変数といってもDoctrine_Recordのオブジェクトが入ってる変数だったらものすごい量でて当たり前。
0238nobodyさん2010/10/16(土) 17:14:44ID:JUO6sOS6
フォームで、ユーザーに改ざんされたくない値を扱う方法で質問です。

formで隠したいパラメータ(from_id)をunsetしておいて、アクションで
> $message = new Message();
> $message['from_id'] = $this->getUser()->getAttribute('id');
> $form = new MessageForm($message);

とやる方法と、

formでunsetせずに
> $values = $this->getUser()->getAttribute($form->getName());
> $values['from_id'] = $this->getUser()->getAttribute('id');
> $form = $this->processForm($form, $values);
と上書きする方法の2通りがあると思うのですが、
どちらも安全でしょうか?
それとも、他に方法があるんでしょうか?
0239nobodyさん2010/10/16(土) 20:04:03ID:JUO6sOS6
セッションがタイムアウトして、AuthenticatedとCredencialがクリアされたのに、
$this->getUser()->setAttribute()した値が残ってるのですが、
これって普通ですか?
0240nobodyさん2010/10/18(月) 18:21:55ID:???
>>239
認証とセッションデータをごっちゃにするなよ
0241nobodyさん2010/10/18(月) 18:54:39ID:3g1bUgIr
DoctrineでのInnnerJoinの書き方で苦戦しています(汗
下記のSQL文でコマンドラインでは動いてるんですが、
どのように記述すればよいのでしょうか?

SELECT w.target_user_id as user_id, DATE_FORMAT(w.created_at,"%Y-%m-%d") as days,w.type as type,count(*) as num FROM warn w
INNER JOIN (
SELECT target_user_id,count(*) AS datas
FROM warn GROUP BY target_user_id
) AS SUB USING(target_user_id)
GROUP BY user_id,days,type
ORDER BY datas DESC ,user_id ASC,days ASC,type ASC;
0242nobodyさん2010/10/19(火) 02:27:53ID:0CIYXc+U
ユーザー情報を持つUserAccountテーブルと、そのIDをカラムに持つBlogテーブルをリレーションさせておくと、
フォームの作成で下記のようなファイルが生成されます。

これが、ユーザー数が多くて、かつuser_idをunset()して使うケースではかなり無駄な気がします。
手作業でsetup()を上書きして、widgetをsfWidgetFormInputText、
validatorをsfValidatorIntegerに変える、という感じに書き換えたいのですが、
スキーマのオプションとかでsfWidgetFormDoctrineChoice()&$this->getRelatedModelName()を
使わないようにはできないんでしょうか?

$this->getRelatedModelName()の呼び出しは1回で済むはずなのに無駄なコードだし。。。
ユーザーが1万人になったら、フォームの表示のたびに2万件のレコード引っ張ってくるつもり?

abstract class BaseBlogForm extends BaseFormDoctrine
{
 public function setup()
 {
  $this->setWidgets(array(
   'id'          => new sfWidgetFormInputHidden(),
   'user_id'       => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('UserAccount'), 'add_empty' => false)),
  ));

  $this->setValidators(array(
   'id'          => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
   'user_id'       => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('UserAccount'))),
  ));
0243nobodyさん2010/10/19(火) 21:06:26ID:0CIYXc+U
sfWidgetFormDoctrineChoice::getChoices()
が呼ばれるのはrender()の時だけ?
大ポカだった。
0244nobodyさん2010/10/20(水) 16:50:03ID:mJZvzEer
sfGuardPluginを使わずに、自分でログインページを作ったのですが、
is_secure:true にした場合にログインページにforwardしてくれるのはいいのですが
認証成功後にforwardする前のページにredirectするにはどうすればいいでしょうか?
02452392010/10/21(木) 01:56:28ID:???
認証情報はセッションに入ってるものだと思ってました。
認証情報はどこに保存されているんでしょう??
0246nobodyさん2010/11/04(木) 18:06:43ID:kCotlNfK
ファイルアップロードで、ファイル名の「'」が「\'」になるんですけど
これってSymfonyの問題ですか?
PHPも初心者なもんでどうすればいいのか分かりません。。。
0247nobodyさん2010/11/06(土) 13:24:52ID:???
問題があるとしたらファイル名に「'」を使ってることかな
0248nobodyさん2010/11/07(日) 05:37:42ID:???
php初心者というかパソコン初心者レベルだな
0249nobodyさん2010/11/08(月) 03:03:57ID:???
セッション(認証?)が30分程度で切れてしまいます。
以下の設定だけでは、変更できないんでしょうか?

#.htaccess
php_value session.gc_maxlifetime 86400
php_value session.gc_probability 1
php_value session.gc_divisor 100

#setting.yml
all:
user:
class: myUser
param:
timeout: 86400
0250nobodyさん2010/11/08(月) 20:05:11ID:???
factories.ymlに書くんだと思う

user:
class: myUser
param:
timeout: 86400

こんな感じ
0251nobodyさん2010/11/09(火) 20:43:10ID:???
さんくす!
0252nobodyさん2010/11/13(土) 05:16:41ID:???
sfDoctrineGuardPlugin使ってます。
バックエンドで、is_super_adminなアカウントだけ閲覧を許可していんですけど
以下のsecurity.ymlでうまくいきません。クレデンシャルが違うんでしょうか?

index:
is_secure: true
credentials: admin

それと、新規登録時に
Notice: Undefined offset: 1 in D:\MyProject\symfony\lib\vendor\symfony\lib\config\sfGeneratorConfigHandler.class.php on line 68

という謎のエラーが出てしまいます。
sfGuardAuthに空のgenerator.ymlを作ると治るという情報があったのですが
治りませんでした。他に解決方法はありませんでしょうか?
0253nobodyさん2010/11/13(土) 07:15:40ID:???
>>252
credentails: [admin]
じゃなくて?
sfDoctrineGuardPlugin使ったことないからよくしらんけど
02542522010/11/13(土) 21:33:07ID:???
「Notice: Undefined offset: 1」のエラーのほうは、

http://www.symfony-project.org/blog/2008/11/12/call-the-expert-customizing-sfdoctrineguardplugin
を参考にしたAPP/congig/generator.ymlの変更をやめて、
中身を全部削除したらうまくいったみたい。
0255nobodyさん2010/11/14(日) 02:59:13ID:???
日別のアクセス数を集計しようとしてるのですが、正常にうごきません。
日付の比較がおかしくなっている感じがします。

スキーマはこんな感じです。
AccessLog:
 tableName: access_log
 actAs: { Timestampable: ~ }
 columns:
  user_id: varchar(50)
0256nobodyさん2010/11/14(日) 03:01:31ID:???
コードと同等(と思っている)のSQLをMySqlコマンドラインから実行すると、正常にいきます。

SELECT a.id, a.user_id, COUNT(*), DATE(a.created_at) AS date
FROM access_log a
WHERE (a.user_id = 'admin' AND a.created_at > '2010-11-01 00:00:00' AND a.created_at < '2010-11-29 23:59:59')
GROUP BY date ORDER BY a.created_at;

「->andWhere('a.created_at < ?',$end)」の行を抜かすと一応取得はできます。
原因はなんでしょうか?

$id = 'admin';
$start = "'2011-11-01 00:00:00'";
$end ="'2011-11-30 23:59:59'";

$this->accesslogs = Doctrine_Query::create()
->select('a.user_id, count(*) as count, DATE(a.created_at) as date')
->from('accesslog as a')
->where('a.user_id = ?',$id)
->andWhere('a.created_at > ?',$start)
->andWhere('a.created_at < ?',$end)
->groupBy('date')
->orderBy('a.created_at')
->execute();

0257nobodyさん2010/11/14(日) 03:04:05ID:???
ついでにfixture.ymlも書いておきます。

AccessLog:
 log1:
  user_id: admin
  created_at: '2010-11-13 21:56:54'
 log2:
  user_id: admin
  created_at: '2010-11-13 21:56:54'
 log3:
  user_id: admin
  created_at: '2010-11-14 21:56:54'
 log4:
  user_id: admin
  created_at: '2010-11-14 21:56:54'
 log5:
  user_id: admin
  created_at: '2010-11-15 21:56:54'
0258nobodyさん2010/11/14(日) 19:32:35ID:???
(たぶん)解決しました。

->from('accesslog as a')
じゃなくて
->from('accesslog a')
に変えると期待通りに動きました^^;

夜中3時間悩んだのに、昼に起きて5分で解決しました。
休憩や睡眠って大事ですね。みなさんもがんばってください。

なんで$endの行が無いときにうまくいったかは謎のままですが。。。
0259nobodyさん2010/11/14(日) 23:36:38ID:???
sfDoctrineGuardPluginって使ってる人いる??
symfony慣れてないくせして導入してみたんだけど、symfonyとバージョン合ってないのかな?

sfGuardRememberMeFilterが機能してない気がする。

settings.ymlで
enabled_modules: [default, sfGuardGroup, sfGuardUser, sfGuardPermission, sfGuardAuth, sfGuardForgotPassword]
を記述しても、バックエンドに追加されてない。
sfGuardUserは手動でバックエンドに追加できるけど、sfGuardPermissionは足りないファイルがたんまり。ネットで拾ってきてもまともに動かない。

あと、save-fixtureしてリロードすると、パスワードがハッシュされてログインできなくなる。

このあたり、どうにかなりませんか?

0260nobodyさん2010/11/15(月) 21:25:47ID:WH+q5o59
こうゆう複雑なSQLはDoctrineでできますか?
Doctrineは単純なSQLだけで、複雑な合成はPHPでやったほうがいいのかな。

SELECT u.id as u__id,
u.username as u__username,
s.date as s__date,
a.access as a__access,
s.sales as s__sales
FROM sf_guard_user u
LEFT OUTER JOIN
(SELECT user_id,
DATE(created_at) AS date,
SUM(amount) AS sales
FROM sales
GROUP BY user_id, DATE(created_at)) s
ON u.username = s.user_id
LEFT OUTER JOIN
(SELECT user_id,
DATE(created_at) AS date,
count(*) AS access
FROM access_log
GROUP BY user_id, DATE(created_at)) a
ON u.username = a.user_id
AND s.date = a.date
WHERE u.username = 'admin'
AND s.date > '2010-11-01 00:00:00'
AND s.date < '2010-12-01 00:00:00'
ORDER BY s.date;
0261nobodyさん2010/11/15(月) 23:40:15ID:???
これ、どうゆう意味ですか?

> 500 | Internal Server Error | Doctrine_Query_Exception
> The root class of the query (alias s) must have at least one field selected.

ユーザー毎の売上げを集計したいだけなんだけど。。。

#action.php
 public function executeSalelist(sfWebRequest $request)
 {
   $this->saless = Doctrine_Query::create()
   ->select('s.user_id as id, p.name, sum(s.amount) as amount')
   ->from('Sales s')
   ->leftJoin('s.Profile p')
   ->groupBy('id')
   ->execute();
 }


02622612010/11/15(月) 23:41:34ID:???
#schema.yml
Sales:
 tableName: sales
 actAs:    { Timestampable: ~ }
 columns:
  user_id:
   type: integer
  amount: integer
 relations:
   User:
    class: sfGuardUser
    foreign: id
    local: user_id
    type: many
    onDelete: cascade
    foreignType: many
    foreignAlias: Sales
   Profile:
    class: sfGuardUserProfile
    foreign: user_id
    local: user_id
    type: many
    onDelete: cascade
    foreignType: many
    foreignAlias: Sales
0263nobodyさん2010/11/16(火) 03:02:08ID:???
sfGuardPluginついでに。

> $this->setWidget('user_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('User'))));

フォームのプルダウンでuser_id=0のアカウントを選択してポストすると、
user_id=1として格納されてしまいます。
なんで〜??
0264nobodyさん2010/11/16(火) 03:53:30ID:???
user_idをauto_incrimentにしてない?
02652612010/11/16(火) 13:36:35ID:???
selectからp.nameをとるととりあえずいける。
Profileがおかしいのかな?

Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: use_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Profile
02662612010/11/16(火) 13:38:26ID:???
sfGuardUserProfile:
tableName: sf_guard_user_profile
actAs: { Timestampable: ~ }
columns:
id: integer
user_id:
type: integer
primary: true
bank_name: varchar(50)
bank_point: varchar(50)
bank_type:
type: enum
values: [ordinary, current]
default: ordinary
name: varchar(50)
bank_number: varchar(50)
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: one
onDelete: cascade
foreignType: one
foreignAlias: Profile
0267nobodyさん2010/11/16(火) 21:13:48ID:???
フォーム難しいですね。。。

スキーマでは user_id(type:integer) にリレーションしてるんだけど、
フォームでは user_name(type:varchar(255)) で入力したい場合はどうすればいいですか?
■ このスレッドは過去ログ倉庫に格納されています