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