簡體   English   中英

Laravel 5.4-未定義變量:將變量從控制器傳遞到視圖

[英]Laravel 5.4 - Undefined variable: passing variable from controller to view

我是Laravel的新手。 我已經搜索了該站點,但是找不到特定的幫助。 我正在嘗試將Controller的變量(即$ Like)的值傳遞給刀片視圖,但是瀏覽器給出了一個錯誤

未定義變量:喜歡

這是我的視圖代碼(dashboard.blade.php)的一部分:

@foreach($posts as $post)
                <article class="post" data-postid="{{ $post->id }}">
                    <div class="interaction">
                        <a href="#" class="like">{{$Like }}</a> |
                    </div>
                </article>
 @endforeach

<script>
        var token = '{{ Session:: token() }}';
        var urlLike = '{{ route('like') }}';
</script>

我的控制器(PostController.php)代碼的一部分:

public function LikePost(Request $request) // post type
    {

        $post_id = $request['postId']; // postId from script.js
        $is_Like = $request['isLike'] === 'true'; // from script.js ...

        $update = false;
        $post = Post::find($post_id);
        $user = Auth::user();
        $like = $user->likes()->where('post_id', $post_id)->first(); 

        $like->like = $is_Like;
        $like->user_id = $user->id;
        $like->post_id = $post->id;

        $Like = $like ? $like->like == 1 ? 'You like this' : 'Like' : 'Like';
        return redirect()->route('dashboard')->with('Like', $Like);
    }

這是我的路線代碼的一部分:

//for like post
Route::post('/like', [
    'uses'=> 'PostController@LikePost',
    'as'=> 'like'
]);

這是我的script.js:

$('.like').on('click', function (event) {
    event.preventDefault();
    postId = event.target.parentNode.parentNode.dataset['postid'];
    // check whether previous element of like/dislike is null or not
    var isLike = event.target.previousElementSibling == null;

    $.ajax({
       method: 'POST',
       url: urlLike,
       data: {
            isLike: isLike,
            postId: postId,
            _token: token
      }
    }).done(function () {
        event.target.innerText = isLike ? event.target.innerText == 'Like' ? 'You like this' : 'Like' : event.target.innerText == 'Dislike' ? 'You dislike this' : 'Dislike';
        if (isLike) {
            event.target.nextElementSibling.innerText = 'Dislike';
        } else {
            event.target.previousElementSibling.innerText = 'Like';
        }
    });
});

我嘗試了很多方法。 但是每次顯示錯誤時,

未定義的變量:就像在dashboard.blade.php中一樣

任何人都請幫助.....

您將重定向到路由,該路由又調用其自己的控制器方法,該方法將變量傳遞給dashboard.blade.php

當您進行redirect()->route('dashboard')->with('Like', $Like)時,實際上是在向會話中刷新一些數據。

重定向到路由並刷新變量時,需要使用session('Like')訪問Blade中的變量。

@foreach($posts as $post)
                <article class="post" data-postid="{{ $post->id }}">
                    <div class="interaction">
                    @if (session('Like'))
                        <div class="alert alert-success">
                            <a href="#" class="like">{{ session('Like') }}</a> |
                        </div>
                    @endif

                    </div>
                </article>
 @endforeach

<script>
        var token = '{{ Session:: token() }}';
        var urlLike = '{{ route('like') }}';
</script>

在此處閱讀更多內容https://laravel.com/docs/5.4/responses#redirecting-with-flashed-session-data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM