Laravel blade模板如何把js参数传递到route方法中

作者: 温新

分类: 【Laravel】

阅读: 3401

时间: 2021-02-14 12:26:27

当使用到了带有参数的路由名称时,如何在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

请登录后再评论