symfony PHPフレームワークpart2 (531レス)
上下前次1-新
242: nobodyさん [] 2010/10/19(火) 02:27:53 ID:0CIYXc+U(1/2) AAS
 ユーザー情報を持つ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'))), 
   ));
243: nobodyさん [] 2010/10/19(火) 21:06:26 ID:0CIYXc+U(2/2) AAS
 sfWidgetFormDoctrineChoice::getChoices() 
 が呼ばれるのはrender()の時だけ? 
 大ポカだった。
244: nobodyさん [] 2010/10/20(水) 16:50:03 ID:mJZvzEer(1) AAS
 sfGuardPluginを使わずに、自分でログインページを作ったのですが、 
 is_secure:true にした場合にログインページにforwardしてくれるのはいいのですが 
 認証成功後にforwardする前のページにredirectするにはどうすればいいでしょうか? 
245: 239 [sage] 2010/10/21(木) 01:56:28 ID:??? AAS
 認証情報はセッションに入ってるものだと思ってました。 
 認証情報はどこに保存されているんでしょう??
246: nobodyさん [] 2010/11/04(木) 18:06:43 ID:kCotlNfK(1) AAS
 ファイルアップロードで、ファイル名の「'」が「\'」になるんですけど 
 これってSymfonyの問題ですか? 
 PHPも初心者なもんでどうすればいいのか分かりません。。。 
247: nobodyさん [sage] 2010/11/06(土) 13:24:52 ID:??? AAS
 問題があるとしたらファイル名に「'」を使ってることかな 
248: nobodyさん [sage] 2010/11/07(日) 05:37:42 ID:??? AAS
 php初心者というかパソコン初心者レベルだな 
249: nobodyさん [sage] 2010/11/08(月) 03:03:57 ID:??? AAS
 セッション(認証?)が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
250: nobodyさん [sage] 2010/11/08(月) 20:05:11 ID:??? AAS
 factories.ymlに書くんだと思う 
  
   user: 
     class: myUser 
     param: 
       timeout: 86400 
  
 こんな感じ 
251: nobodyさん [sage] 2010/11/09(火) 20:43:10 ID:??? AAS
 さんくす! 
252(2): nobodyさん [sage] 2010/11/13(土) 05:16:41 ID:??? AAS
 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を作ると治るという情報があったのですが 
 治りませんでした。他に解決方法はありませんでしょうか? 
253: nobodyさん [sage] 2010/11/13(土) 07:15:40 ID:??? AAS
 >>252 
 credentails: [admin] 
 じゃなくて? 
 sfDoctrineGuardPlugin使ったことないからよくしらんけど 
254: 252 [sage] 2010/11/13(土) 21:33:07 ID:??? AAS
 「Notice: Undefined offset: 1」のエラーのほうは、 
  
 外部リンク:www.symfony-project.org 
 を参考にしたAPP/congig/generator.ymlの変更をやめて、 
 中身を全部削除したらうまくいったみたい。
255: nobodyさん [sage] 2010/11/14(日) 02:59:13 ID:??? AAS
 日別のアクセス数を集計しようとしてるのですが、正常にうごきません。 
 日付の比較がおかしくなっている感じがします。 
  
 スキーマはこんな感じです。 
 AccessLog: 
  tableName: access_log 
  actAs:        { Timestampable: ~ } 
  columns: 
   user_id: varchar(50)
256: nobodyさん [sage] 2010/11/14(日) 03:01:31 ID:??? AAS
 コードと同等(と思っている)の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();
257: nobodyさん [sage] 2010/11/14(日) 03:04:05 ID:??? AAS
 ついでに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'
258: nobodyさん [sage] 2010/11/14(日) 19:32:35 ID:??? AAS
 (たぶん)解決しました。 
  
 ->from('accesslog as a')  
 じゃなくて 
 ->from('accesslog a')  
 に変えると期待通りに動きました^^; 
  
 夜中3時間悩んだのに、昼に起きて5分で解決しました。 
 休憩や睡眠って大事ですね。みなさんもがんばってください。 
  
 なんで$endの行が無いときにうまくいったかは謎のままですが。。。 
259: nobodyさん [sage] 2010/11/14(日) 23:36:38 ID:??? AAS
 sfDoctrineGuardPluginって使ってる人いる?? 
 symfony慣れてないくせして導入してみたんだけど、symfonyとバージョン合ってないのかな? 
  
 sfGuardRememberMeFilterが機能してない気がする。 
  
 settings.ymlで 
     enabled_modules:      [default, sfGuardGroup, sfGuardUser, sfGuardPermission, sfGuardAuth, sfGuardForgotPassword] 
 を記述しても、バックエンドに追加されてない。 
 sfGuardUserは手動でバックエンドに追加できるけど、sfGuardPermissionは足りないファイルがたんまり。ネットで拾ってきてもまともに動かない。 
  
 あと、save-fixtureしてリロードすると、パスワードがハッシュされてログインできなくなる。 
  
 このあたり、どうにかなりませんか?
260: nobodyさん [] 2010/11/15(月) 21:25:47 ID:WH+q5o59(1) AAS
 こうゆう複雑な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;
261(3): nobodyさん [sage] 2010/11/15(月) 23:40:15 ID:??? AAS
 これ、どうゆう意味ですか? 
  
 > 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(); 
  }
262: 261 [sage] 2010/11/15(月) 23:41:34 ID:??? AAS
 #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
263: nobodyさん [sage] 2010/11/16(火) 03:02:08 ID:??? AAS
 sfGuardPluginついでに。 
  
 >   $this->setWidget('user_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('User')))); 
  
 フォームのプルダウンでuser_id=0のアカウントを選択してポストすると、 
 user_id=1として格納されてしまいます。 
 なんで〜?? 
264: nobodyさん [sage] 2010/11/16(火) 03:53:30 ID:??? AAS
 user_idをauto_incrimentにしてない? 
265: 261 [sage] 2010/11/16(火) 13:36:35 ID:??? AAS
 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
266: 261 [sage] 2010/11/16(火) 13:38:26 ID:??? AAS
 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
上下前次1-新書関写板覧索設栞歴
あと 265 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s