代码之家  ›  专栏  ›  技术社区  ›  ST80

PHP Laravel会话flash警报消息未显示

  •  2
  • ST80  · 技术社区  · 5 年前

    在我的 laravel 现在,检查本身可以工作,但是flash/alert消息没有显示,我不知道为什么。

    在我看来:

    @if (\Session::has('success'))
        <div class="alert alert-success">
           <p>{{ \Session::get('success') }}</p>
        </div>
    @endif
    @if (\Session::has('failure'))
        <div class="alert alert-danger">
           <p>{{ \Session::get('failure') }}</p>
        </div>
    @endif
     <div class="contact-form" id="contact">
         <form method="POST" action="{{ route('contact.store') }}">
         ...
         </form>
     </div>
    

    在我的控制器里:

    // when the checkbox is checked!
    
    if (!empty(request()->newsletter)) {
        if (!Newsletter::isSubscribed(request()->email)) {
            Newsletter::subscribePending(request()->email);
    
            return redirect()->route('contact.create')->with('success', 'Thanks for subscribing!');
    
        } else {
    
            return redirect()->route('contact.create')->with('failure', 'You are already subscribed');
    
        }
    }
    

    有人能帮我吗?

    4 回复  |  直到 5 年前
        1
  •  7
  •   Tim Ogilvy Tim    5 年前

    您似乎使用的是会话类,而不是服务容器上的会话助手laravel注入。

    https://laravel.com/docs/5.8/responses#redirecting-with-flashed-session-data

    一个例子

    Route::post('user/profile', function () {
        // Update the user's profile...
    
        return redirect('dashboard')->with('status', 'Profile updated!');
    });
    

    所以在blade中使用helper函数,如下所示:

    @if (session('status'))
        <div class="alert alert-success">
            {{ session('status') }}
        </div>
    @endif
    

        2
  •  0
  •   Niklesh Raut    5 年前

    我认为你应该把值作为数组传递 ['success'=>'Thanks for subscribing!' ,试试这个。

    if (!empty(request()->newsletter)) {
        if (!Newsletter::isSubscribed(request()->email)) {
            Newsletter::subscribePending(request()->email);
    
            return redirect()->route('contact.create')->with(['success'=>'Thanks for subscribing!']);
    
        } else {
    
            return redirect()->route('contact.create')->with(['failure'=> 'You are already subscribed']);
    
        }
    }
    
        3
  •  0
  •   Emeka Okafor    5 年前
    @if (Session::has('success'))
        <div class="alert alert-success">
           <p>{{Session::get('success') }}</p>
        </div>
    @endif
    @if (Session::has('failure'))
        <div class="alert alert-danger">
           <p>{{ Session::get('failure') }}</p>
        </div>
    @endif
    

    我喜欢这样做,你可以试试

    @if (session('success'))
                    <div class="alert alert-success">
                        {{ session('success') }}
                    </div>
                @endif
    @if (session('failure'))
                    <div class="alert alert-danger">
                        {{ session('failure') }}
                    </div>
                @endif
    

    if (!empty(request()->newsletter)) {
        if (!Newsletter::isSubscribed(request()->email)) {
            Newsletter::subscribePending(request()->email);
    
            return redirect()->route('contact.create')->with(['success'=> 'Thanks for subscribing!']);
    
        } else {
    
            return redirect()->route('contact.create')->with(['failure'=>'You are already subscribed']);
    
        }
    }
    

    这样它将返回一个数组而不是一个对象

        4
  •  0
  •   HashtagForgotName    5 年前

    WithMessage 而不是 with 所以在控制器中你可以这样重定向 return back()->withMessage('Thanks for subscribing'); 然后在刀片中,您可以使用

    @if (session('message'))
       <div class="alert alert-success">
          {{ session('message') }}
       </div>
    @endif
    

    对于错误消息,我将亲自使用laravel it self的验证器,这样您就可以访问这样的错误

    @if($errors->any())
    <div class="form-group">
        @foreach($errors->all() as $error)
            <div class="alert alert-danger">
                <ul>
                    <li> {{ $error }} </li>
                </ul>
            </div>
        @endforeach
    </div>
    @endif
    

    @if 刀片中的声明

        5
  •  0
  •   Bombajofter    5 年前

    如果上面的答案没有给你想要的结果,你应该检查你的请求是否通过了验证。

    验证后尝试dd()请求,看看是否从请求中获得结果。

    如果问题在于会话的闪烁,这就是我喜欢的方式。

    if (!empty(request()->newsletter)) {
        if (!Newsletter::isSubscribed(request()->email)) {
            Newsletter::subscribePending(request()->email);
            Session::flash('message', 'Thanks for subscribing!');
            Session::flash('alert-class', 'alert-success');
            return redirect()->route('contact.create');
    
        } else {
            Session::flash('message', 'You are already subscribed!');
            Session::flash('alert-class', 'alert-danger');
            return redirect()->route('contact.create');
    
        }
    }
    

      @if(Session::has('message'))
          <div class="form-group row">
              <div class="col-6">
                  <p class="alert {{ Session::get('alert-class', 'alert-info') }}">{{ 
                    Session::get('message') }}</p>
              </div>
          </div>
      @endif
    

    别忘了控制器顶部的会话引用!

    use Session;
    
        6
  •  0
  •   bravohex    4 年前

    在我的例子中,session flash只处理表单submit和return redirect()。

    我在拉维5.8工作

    -控制器

    class HomeController extends Controller
    {
        public function index()
        {
            return view('welcome');
        }
    
        public function test(Request $request)
        {
            return redirect()->back()->with(['success' => 'Thanks for subscribing']);
        }
    }
    
    
    • 路线
    Route::get('/home', 'HomeController@index');
    Route::post('/test', 'HomeController@test');
    
    • 查看
    @if ($message = session('success'))
      <div class="alert alert-success alert-block">
        <strong>{{ $message }}</strong>
      </div>
    @endif