symfony PHPフレームワークpart2 (531レス)
上下前次1-新
215: nobodyさん [sage] 2010/10/10(日) 17:54:56 ID:??? AAS
 いや、ヒントだけでよかったんだよ。 
 いま開発環境ないPCだけど、Renderフィルター覗けばなんか分かりそうな気がしてきた。
216: nobodyさん [sage] 2010/10/10(日) 19:46:16 ID:??? AAS
 forward404Unless()で404エラーページに飛んだとき、 
 prod環境でも第2引数を画面に表示するにはどうすればいい?
217(1): nobodyさん [sage] 2010/10/10(日) 21:13:44 ID:??? AAS
 初心者ですいません。 
 Table: 
   columns: 
     id: 
     name: 
 のように定義した状態で、 
 executeCreate内でnameフォームの値を取得するのに「$request->getParameter('name')」や「$form['name']->getValue()」 
 としてみたのですが、値が取得できません。 
 フォームの値を取り出すにはどのようにやればいいのでしょうか?
218: 217 [sage] 2010/10/10(日) 22:15:33 ID:??? AAS
 $requestArray = $request->getParameter($form->getName()); 
 $requestArray['name'] 
  
 で取得できたんですけど、毎回こうやらないとダメなんでしょうか(汗)
219: nobodyさん [sage] 2010/10/11(月) 00:09:02 ID:??? AAS
 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
220(1): nobodyさん [sage] 2010/10/11(月) 00:10:20 ID:??? AAS
 #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() ?> 
  
 似たような話題で、外部リンク:blog.asial.co.jp も見てみたのですが、 
 バージョン違いなのか全く動きませんでした。
221: nobodyさん [sage] 2010/10/11(月) 01:17:59 ID:??? AAS
 >>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(); 
  
 に変えたらどう? 
222: nobodyさん [sage] 2010/10/11(月) 02:17:36 ID:??? AAS
 fetchOne()に変えて、$thread['User']['name'] で取得できました! 
 SQLも新しく発行されていないようです。 
 ただ、$thread->getId() の構文が使えなくて $thread['id'] に全部書き換えないといけませんけど>< 
223: nobodyさん [sage] 2010/10/11(月) 02:55:20 ID:??? AAS
 サンプルに合わせて言い方変えちゃいましたけど、 
 実際はfetchArray()で取得して、foreach()でループさせました。 
 とりあえずうまく行ったようです。 
224(1): nobodyさん [sage] 2010/10/11(月) 20:37:48 ID:??? AAS
 $form->isValid()に失敗したとき、失敗の内容はどうやって取得できますか? 
  
 具体的には、CSRFチェックに引っかかったとき、自動的にhoge/newにリダイレクトさせたいんです。
225: nobodyさん [sage] 2010/10/12(火) 00:52:35 ID:??? AAS
 >>224 
 sfErrorSchemaにでも、入ってるんじゃないの? 
  
 $form->getErrorSchema()だったかな? 
226(1): nobodyさん [sage] 2010/10/13(水) 20:37:10 ID:??? AAS
 特定のユーザーを、強制ログアウトさせるにはどうすればいいですか? 
227(1): nobodyさん [sage] 2010/10/14(木) 10:37:08 ID:??? AAS
 >>226 
 myUserの初期化メソッドで通常の処理の後にIDみて強制ログアウトする処理を足す。 
228(1): nobodyさん [sage] 2010/10/14(木) 17:05:40 ID:??? AAS
 >>227 
 すいません、そうゆう意味じゃないです。 
 たとえば、管理者が荒らし行為真っ最中のユーザーを見つけたら、 
 そいつのセッションやらクレデンシャルやらをクリアしてログアウトさせることをイメージしてました。 
  
 セッションにユーザーIDを入れておき、 
 全セッションファイルをトラバースして、 
 「id|i:(\d)+:123;」みたいにマッチしたファイルを削除すればいいかな? 
 symfony関係なくなっちゃうけど。。。 
229(1): nobodyさん [sage] 2010/10/14(木) 17:34:03 ID:??? AAS
 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"); 
  
 結果、日付の区別無しに、ログの総数が返ります。 
230: nobodyさん [sage] 2010/10/14(木) 17:44:03 ID:??? AAS
 恥ずかしいミスした! 
 DoctrineCorectionは、DoctrineCollectionの間違いでした^^; 
231(1): nobodyさん [sage] 2010/10/14(木) 19:07:30 ID:??? AAS
 >>228 
 それならis_active int(1)とかでフラグ項目をDBのユーザーテーブルに持たせておいて、公開側では 
 myUserの初期化で$dbuser->getIsActive()の値を調べて強制ログアウトさせればいいんじゃない? 
 強制ログアウトさせたいユーザーは、管理者が裏画面からis_activeの値を更新して強制ログアウト側に 
 落とす。 
  
 username password is_active 
232: 231 [sage] 2010/10/14(木) 19:08:38 ID:??? AAS
 ごめん、途中送信。 
  
 username password is_active 
 testuser   ******    1     ⇒ログインできる 
 nguser     ******    0     ⇒ログインできない&強制ログアウト
233: nobodyさん [sage] 2010/10/14(木) 20:07:47 ID:??? AAS
 myUserにコンストラクタ定義すると、深い迷路に迷い込めそうな予感。。。 
234: 229 [sage] 2010/10/15(金) 17:53:24 ID:??? AAS
 ちょっと語弊がありました。 
 グループ化された日付が1つだけの場合、グループ化されていないままのレコード総数が返ります。 
 日付が複数の場合、正しい値が返ります。 
235: nobodyさん [sage] 2010/10/15(金) 17:59:07 ID:??? AAS
 分かったら当たり前だけど、myUserのコンストラクタは 
  
  public function __construct(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array()) 
  { 
   parent::__construct($dispatcher, $storage, $options); 
  } 
  
 って書かないとダメなのね。__construct()とだけ書いてちょっと泥沼になった。 
236(1): nobodyさん [sage] 2010/10/15(金) 18:25:07 ID:??? AAS
 テンプレート内でvar_dump()すると、指定した変数以外もすんごい量がダンプされるんですけど 
 $thisとかも見に行ってるんですか?? 
237: nobodyさん [sage] 2010/10/15(金) 21:08:43 ID:??? AAS
 >>236 
 変数といってもDoctrine_Recordのオブジェクトが入ってる変数だったらものすごい量でて当たり前。 
238: nobodyさん [] 2010/10/16(土) 17:14:44 ID:JUO6sOS6(1/2) AAS
 フォームで、ユーザーに改ざんされたくない値を扱う方法で質問です。 
  
 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通りがあると思うのですが、 
 どちらも安全でしょうか? 
 それとも、他に方法があるんでしょうか?
239(2): nobodyさん [] 2010/10/16(土) 20:04:03 ID:JUO6sOS6(2/2) AAS
 セッションがタイムアウトして、AuthenticatedとCredencialがクリアされたのに、 
 $this->getUser()->setAttribute()した値が残ってるのですが、 
 これって普通ですか?
上下前次1-新書関写板覧索設栞歴
あと 292 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s