在 blade 模板 {{ route () }} 中使用 JavaScript 变量的问题

我载 web.php 中定义了一条如下的路由:

Route::get( '/manager/content/get_content_name/{content}',  'ContentsController@get_content_name') -> name('manager.content.get_content_name');

ContentsController 控制器中定义如下的方法:

    public function get_content_name(Content $content)
    {
        return ($content->name);
    }

在视图中想使用 ajax 通过 pre_content_id 来快速获取 $content->name,ajax 如下

        var pre_content_id = $("label#pre_content_id").text();
        $.ajax({
            url: '{{ route('manager.content.get_content_name', pre_content_id) }}',
            type: 'GET',
            dataType: 'text',
            success: function(result){
                $("label#pre_content_id").text(result);
            }
        });

整个逻辑就是这个样子的。
运行结果报错如下

ErrorException (E_ERROR)
Use of undefined constant pre_content_id - assumed 'pre_content_id' (this will throw an Error in a future version of PHP) (View: D:\WebService\laravel\smenu\resources\views\manager\content\show.blade.php)
Previous exceptions
Use of undefined constant pre_content_id - assumed 'pre_content_id' (this will throw an Error in a future version of PHP) (0)

现在的问题就是 pre_content_id 是 js 的变量
怎么样才能在 '{{ route('manager.content.get_content_name', pre_content_id) }} 中,让 pre_content_id 这个 js 的变量被 js 解析,而不是被 blade 解析呢。

在解决过程中,尝试了如下的方法:
将路由定义更改为:

Route::get( '/manager/content/get_content_name/{content?}',  'ContentsController@get_content_name') -> name('manager.content.get_content_name');

将 ajax 代码更改为:

        var pre_content_id = $("label#pre_content_id").text();
        $.ajax({
            url: '{{ route('manager.content.get_content_name', pre_content_id) }}',
            type: 'GET',
            data:{
                content: pre_content_id
            },
            dataType: 'text',
            success: function(result){
                $("label#pre_content_id").text(result);
            }
        });

发现不会报错,后台查看 ajax 的请求地址变为
http://test.app/manager/content/get_content_name?content=10005
但是这个请求,仍然不能正常的被路由解析到 ContentsController 控制器的 get_content_name 方法。

我翻了半宿的论坛和手册,也没有找到相关的解答。
当然,我知道是可以直接使用手工拼接 URI 来实现功能,但是我现在就是想通过 {{route()}} 来实现。
脑袋进死胡同了,钻牛角尖了,转不出来了。
希望诸位能帮忙解答一下,或者给一个手册的查找方向。
谢谢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

这是不可能的,因为 PHP 的渲染早于 JS,这是无法改变的。

4年前 评论
讨论数量: 6
leo

这是不可能的,因为 PHP 的渲染早于 JS,这是无法改变的。

4年前 评论

你这写的啥玩意,把js变量写到php函数里?这么秀的啊

4年前 评论

@pigzzz 要不说钻牛角尖了呢,就想尝试一下。。。。

4年前 评论

@leo 其实也明白的,就是想 blade 这么牛的东西,感觉应该有个什么机制可以实现。。。

4年前 评论
Sanbo 3年前

url()和route()的本质是生产url,你提交的时候是js在部分在生效,已经是在html上操作了,{{url()}}、{{route()}}的部分在html中已经是个字符串了,预设变量占位字符串如(obj_id、user_id),js代码中使用replace方法将占位的字符串替换成js变量即可

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!