symfony PHPフレームワークpart2 (531レス)
上下前次1-新
221: nobodyさん [sage] 2010/10/11(月) 01:17:59 ID:??? AAS
>>220220(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 も見てみたのですが、
バージョン違いなのか全く動きませんでした。
$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()した値が残ってるのですが、
これって普通ですか?
240: nobodyさん [sage] 2010/10/18(月) 18:21:55 ID:??? AAS
>>239
認証とセッションデータをごっちゃにするなよ
241: nobodyさん [] 2010/10/18(月) 18:54:39 ID:3g1bUgIr(1) AAS
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;
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
認証情報はセッションに入ってるものだと思ってました。
認証情報はどこに保存されているんでしょう??
上下前次1-新書関写板覧索設栞歴
あと 286 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s