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

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

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

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

  1. public function signInWithToken()
  2. {
  3. // Session::forget('codeSent');
  4. if(Session::has('nextStep') && Session::has('foundUser')) {
  5. $user = User::where('usr_mobile_phone', Session::get('foundUser'))->first();
  6. if(Session::has('codeSent')){
  7. $nowTime = now();
  8. $sentTime = Session::get('codeSent');
  9. $diffedTime = $sentTime->diffInSeconds($nowTime);
  10. if($diffedTime == 0){
  11. $user->activeCode()->delete();
  12. Session::forget('codeSent');
  13. }
  14. return view('frontend.auth.token',compact('diffedTime'));
  15. }else{
  16. $code = ActiveCode::generateCode($user);
  17. $user->notify(new ActiveCodeNotification($code, Session::get('foundUser')));
  18. Session::put('codeSent', now()->addMinutes(10));
  19. return view('frontend.auth.token');
  20. }
  21. }else{
  22. abort(404);
  23. }
  24. }

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

  1. $nowTime = now();
  2. $sentTime = Session::get('codeSent');
  3. $diffedTime = $sentTime->diffInSeconds($nowTime);
  4. if($diffedTime == 0){
  5. $user->activeCode()->delete();
  6. Session::forget('codeSent');
  7. }

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

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

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

eivgtgni

eivgtgni1#

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

  1. <div id="counter">
  2. </div>
  3. <script>
  4. var diffedTime = {!! json_encode($diffedTime) !!} ;
  5. timer = setInterval(function () {
  6. document.getElementById('counter').innerText = diffedTime
  7. if (diffedTime <= 0) {
  8. clearInterval(timer)
  9. }
  10. diffedTime--;
  11. }
  12. , 1000)
  13. </script>

相关问题