Laravel blade模板如何把js参数传递到route方法中
当使用到了带有参数的路由名称时,如何在blade视图模板中把javascript参数传递到route()
函数中?
这是一个经常碰到的问题,当发现按照正常的方式来传递参数时,由于参数是js传递过来的,因此报错了。对于这个问题一直没有去解决,而是使用/use/id= + id?
这种方法来解决的。这就带来了一个问题,本想全部使用路由名称来使用url,因为这个问题导致了代码中有2种不同的路由方式,当然了这并不是问题。今天,总算是解决了。下面来看来问题。
假设这是编辑一条数据的信息
路由
Route::get('edit/{id}','TestController@edit')->name('test');
控制器方法
public function edit($id)
{
dd($id);
}
视图传递参数
<!-- 一般情况下,会这样写 -->
<a href='/edit/{{$test->id}}'>编辑</a>
<a href='route("test',['id'=>$test->id]")'>编辑</a>
这种情况下,那么问题来了,要是id
是javascript中的变量呢?使用route
就会报错了。但是使用/edit/{{$test->id}}
,那么定义路由名称也就没有任何含义了。
<!--由于id是js变量,因此会报错-->
<a href="route('test',['id'=>id])">编辑</a>
下面用一个实际案例来解决问题。
// 这个场景在实际开发中经常遇到,传递过来的参数是js变量
// 而这种传递route参数的方式是错误,因为id是js变量
function assign_role(id) {
okLayer.open('测试传递参数','{{ route('test',['id'=>id]) }}','50%','90%', null, function(){
});
}
下面是解决方法!!!下面是解决方法!!!下面是解决方法!!!
function assign_role(id) {
okLayer.open('测试传递参数','{{ route('test',['id'=>'xxxx']) }}'.replace(/xxxx/,id),'50%','90%', null, function(){
});
}
1)laravel route函数会将路由解析为具体的url,此案例中转为http://test/xxx
2)replace js函数将http://test/xxx
中的xxx替换为js变量id
这样就解决了路由参数的问题。
2021-02-14
请登录后再评论