php 如何实时显示刀片上每秒变化的变量

xuo3flqw  于 2022-12-21  发布在  PHP
关注(0)|答案(1)|浏览(97)

bounty将在7天后过期。回答此问题的人有资格获得+50的声望奖励。Pouya希望吸引更多人关注此问题。

我制作了一个方法,向用户的移动的号码发送一个临时代码,用于验证用户的帐户:

public function signInWithToken()
{
    // Session::forget('codeSent');
    if(Session::has('nextStep') && Session::has('foundUser')) {
        $user = User::where('usr_mobile_phone', Session::get('foundUser'))->first();
        if(Session::has('codeSent')){
            $nowTime = now();
            $sentTime = Session::get('codeSent');
            $diffedTime = $sentTime->diffInSeconds($nowTime);
            if($diffedTime == 0){
                $user->activeCode()->delete();
                Session::forget('codeSent');
            }

            return view('frontend.auth.token',compact('diffedTime'));
        }else{
            $code = ActiveCode::generateCode($user);
            $user->notify(new ActiveCodeNotification($code, Session::get('foundUser')));
            Session::put('codeSent', now()->addMinutes(10));

            return view('frontend.auth.token');
        }

    }else{
        abort(404);
    }
}

因此,第一次生成代码,会话codeSent也将被提交,其值比当前时间高10分钟。
然后,我还需要检查这个会话是否已经提交,然后它必须从$sentTime中减去$nowTime,以确定代码是否在10分钟前生成,是否太旧:(因此必须从DB中删除代码,并且必须忘记会话)

$nowTime = now();
$sentTime = Session::get('codeSent');
$diffedTime = $sentTime->diffInSeconds($nowTime);
if($diffedTime == 0){
      $user->activeCode()->delete();
      Session::forget('codeSent');
}

然后在刀片上,我需要类似这样的东西:

@if(session('codeSent'))
     <div class="alert alert-warning" role="alert">
           Seconds left for code expiration:
           {{ $diffedTime }}
     </div>
@endif

但是不知道如何在刀片上生动地显示这个$diffedTime,因为它每秒都在变化。
所以如果你知道,请让我知道,我真的很感激任何想法或建议,从你们...

eivgtgni

eivgtgni1#

您需要使用javascript来设置计时器:

<div id="counter">
</div>
<script>
   var diffedTime = {!! json_encode($diffedTime) !!} ;
    timer = setInterval(function () {
            document.getElementById('counter').innerText = diffedTime

            if (diffedTime <= 0) {
                clearInterval(timer)
            }
            diffedTime--;
        }
        , 1000)
</script>

相关问题