在 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 ()}} 来实现。
脑袋进死胡同了,钻牛角尖了,转不出来了。
希望诸位能帮忙解答一下,或者给一个手册的查找方向。
谢谢
推荐文章: