1

ORMとしてsymfony1.4.8とPropelを使用しています。ログインシステムを作成するために、私はsfGuardPluginを使用しています。すべてを構成しましたが、ログインシステムは機能しています。しかし、sfGuardUser idなどのsfGuardユーザーデータの取得に問題があり、ログイン時に戻るボタンの問題が発生します。ログインして戻るボタンを押すと、再びログインページが表示されます。

ユーザーがログインしているかどうかを確認するためにビューで使用しているコードは次のとおりです。

<?php if($sf_user->isAuthenticated()): ?>
         <?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
         <?php echo link_to('Login', '/login') ?>
<?php endif; ?>

このメソッドを使用してsfGuardUserIDを取得する場合:

if($this->getUser())
{
    $login_id=$this->getUser();
    $c=new Criteria();
    $c->add(SfGuardUserPeer::USERNAME,$login_id);
    $sf_guard_user=SfGuardUserPeer::doSelectOne($c);
    if($sf_guard_user)
    {
        $sf_id=$sf_guard_user->getId();          

    }
}

それは私にエラーを与えます:

(致命的なエラー:ネストレベルが深すぎます-再帰的な依存関係?124行目のD:\ development \ sfprojects \ proj \ lib \ vendor \ symfony \ lib \ plugins \ sfPropelPlugin \ lib \ vendor \ propel \ util \ DebugPDOStatement.php)

4

1 に答える 1

2

まず第一に、私はこのコードに何か問題があるとは思わない、

<?php if($sf_user->isAuthenticated()): ?>
         <?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
         <?php echo link_to('Login', '/login') ?>
<?php endif; ?>

私は一般的に次のようなものを使用します:

  <div id="left_section">
      <!-- This section is devoted to user context op -->
      <?php if(!$sf_user->isAuthenticated()):?>
        <div id="log_form">
          <?php echo include_partial('user/login',array('form' => new sfGuardFormSignin()))?>
        </div>
        Dont have an account yet?
        <?php echo link_to('Register now!','user/new')?>
      <?php else:?>
        <div id="user_info">
         <?php echo include_partial('user/info')?>
       </div>
      <?php endif?>
    </div>

ブラウザの戻るボタンはWeb開発者にとって苦痛だと思うので、それが「戻るボタン」についてのあなたの言うことであるならば、完全に落胆しました。ユーザーがログインページにログインしたときにユーザーをリダイレクトするか、スロットを使用してウェルカムメッセージ/ログインフォームをレンダリングしてみてください。そうすることで、ユーザーが常に必要なものを確認できるようになります。また、リダイレクトすると、サーバーはすべてを再度レンダリングし、セッション情報が完全であることを確認します。

ユーザーIDを取得する方法については、次のようになります。アクションを実行していると仮定します。

$this->getUser()->getGuardUser()->getId()

そしてそれはそれをするべきです。

于 2011-02-17T14:06:34.703 に答える