Laravel 5.4 - 未定义变量:将变量从控制器传递到视图

时间:2017-03-06 21:38:28

标签: php laravel-5.4

我是Laravel的新手。我搜索了这个网站但找不到具体的帮助。我正在尝试将一个变量值(也就是$ Like)从Controller传递到刀片视图,但是浏览器会出现错误

未定义变量:喜欢

以下是我的视图代码(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

任何人都请帮忙.....

1 个答案:

答案 0 :(得分:1)

您正在重定向到一个路由,该路由又调用自己的控制器方法,该方法将变量传递给dashboard.blade.php

执行redirect()->route('dashboard')->with('Like', $Like)时,您实际上是在向会话中闪现一些数据。

在重定向到路由和闪烁变量时,您需要使用session('Like')来访问刀片中的变量。

@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