【问题标题】:Laravel 5.4 - Undefined variable: passing variable from controller to viewLaravel 5.4 - 未定义变量:将变量从控制器传递到视图
【发布时间】:2017-03-07 05:48:24
【问题描述】:

我是 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中

请大家帮忙.....

【问题讨论】:

  • 我首先要摆脱这个:$Like = $like ? $like-&gt;like == 1 ? 'You like this' : 'Like' : 'Like'; 链接三元语句是一种非常糟糕的做法。

标签: php laravel-5.4


【解决方案1】:

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

当您执行redirect()-&gt;route('dashboard')-&gt;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

【讨论】:

  • 使用会话没有帮助。因为,$is_Like = null 在我的脚本中。因此$like-&gt;like 的值主要在我的控制器中也为空。因此,当我使用会话时,我的视图没有显示任何喜欢的选项,因为主要它既不是 0 也不是 1。你有什么可以建议我的吗?请... @Tamás
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 2017-09-03
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多