使用未定义的常量后假设' post' - 用HTML编写的PHP代码

时间:2018-04-04 20:51:39

标签: php laravel

您知道为什么以下代码中的代码"<a href="{{route('posts.show', ['id' => 'post.id', 'slug' => post.slug])}}" class="btn btn-primary text-white">More</a>"显示使用未定义的常量帖子 - 假设&#39;帖子&#39;?

    $.each(result, function(index, post) {
            newPosts += '<div class="col-12 col-sm-6 col-lg-4 col-xl-3 mb-4">\n' +
'                        <div class="card box-shaddow">\n' +
+'                            <div class="card-body">\n' +
+'                                <h5 class="card-title h6 font-weight-bold text-heading-blue">'+post.name+'</h5>\n' +
+'                            </div>\n' +
'                            <div class="card-footer d-flex justify-content-between align-items-center">\n' +
'                                 <a href="{{route('posts.show', ['id' => 'post.id', 'slug' => post.slug])}}" class="btn btn-primary text-white">More</a>

'       <span class="font-weight-bold font-size-sm text-heading-blue"> </span>\n' +
'                            </div>\n' +
'                        </div>\n' +
'                    </div>';
        });

1 个答案:

答案 0 :(得分:1)

在调用Blade的post函数时,不能将Javascript route()对象用作变量。 Blade会在将模板发送到浏览器之前在服务器上呈现模板,而您的Javascript代码会在很晚之后由访问者在其计算机上执行。

一个选项是让Blade填充一个可以在Javascript中使用的变量,使用虚拟值:

var placeholder = "{{route('posts.show', ['id' => 123, 'slug' => 'demo-slug'])}}";

$.each(result, function(index, post) {
    var url = placeholder.replace(123, post.id).replace('demo-slug', post.slug);

    newPosts += '[...]'
             +  '<a href="' + url + '" class="btn btn-primary text-white">More</a>'
             +  '[...]';
});

您用作占位符的值取决于您的路线的样子以及使用的验证(如果有)。只需确保使用不属于URI的占位符文本。