在 laravel 刀片路由中使用 JavaScript 变量
Posted
技术标签:
【中文标题】在 laravel 刀片路由中使用 JavaScript 变量【英文标题】:Using JavaScript variables inside laravel blade routes 【发布时间】:2017-06-08 07:56:47 【问题描述】:我有一段 View 代码,其中包含来自对 Ajax 的“.get”请求的数据。 .get 请求将一些 php 代码传递给控制器,该控制器从查询中检索结果并将它们存储在 JS 对象“bookingObj”中。
问题是,我想使用一些由查询检索并存储在此对象中的 id 作为参数,用于路由到另一个 laravel 函数“edit”。目前,当我尝试将这些变量连接到刀片辅助函数中时,我没有得到它们的实际值,只是逐字逐句地得到变量名。
例如,在我的代码中:
<a href=" route("bookings.edit", [' + bookingObj.id + ',' + bookingObj.tour_id + ',' + bookingObj.datedtour_id + ']) ">
// 在 chrome 检查器中返回这个
<a href="http://localhost/laravel/bookings/ + bookingObj.id + /edit/ + bookingObj.tour_id + / + bookingObj.datedtour_id + ">Edit</a>
我希望看到整数(来自数据库的 ID)代替“bookingObj”属性。
任何人都知道我是否必须使用任何转换函数来显示此内容,或者可能愿意尝试解释问题所在?
非常感谢!
这是我的其余代码:
$.get(url + variable, function(data)
console.log('Call complete');
//success data
$('tr#bookingstable').remove();
$.each(data, function(index, bookingObj)
var startdate = new Date(bookingObj.datedtourstartdate.replace(/-/g,"/"));
var enddate = new Date(bookingObj.datedtourenddate.replace(/-/g,"/"));
$('table').append(
'<tr id="bookingstable"><td scope="row"><a href=" route("bookings.show", $booking->id) ">' + bookingObj.name + '</a></td><td scope="row">' + bookingObj.size + '</td><td scope="row">' + bookingObj.tour_name + '</td><td scope="row">' + bookingObj.category_name + '</td><td scope="row">' + bookingObj.continent_name + '</td><td scope="row">' + dateFormat(startdate, "dd.mm.yyyy") + ' - ' + dateFormat(enddate, "dd.mm.yyyy") + '</td><td scope="row"><li class="tiny success button"><a href=" route("bookings.edit", [' + bookingObj.id + ',' + bookingObj.tour_id + ',' + bookingObj.datedtour_id + ']) ">Edit</a></li></td><td scope="row"><form method="post" name="_token" value="<?php echo csrf_token(); ?>" action=" route("bookings.destroy", ["id" => $booking->id]) ">!! csrf_field() !!<input type="hidden" name="_method" value="DELETE"><input type="hidden" name="booking_id" value="!! $booking->id !!"><input type="submit" class="tiny alert button" value="Delete"></form></td></tr>'
); // end append
); // end each
); // end get
谢谢,
问候,
罗伯特
英国伦敦
【问题讨论】:
一般来说,对于这样的事情,在刀片模板中硬编码路线会更容易。 我已经在***.com/questions/27634285/…找到了解决这个问题的方法 【参考方案1】:假设您的变量名称是“post_url”,其中您有想要在 Ajax 中用作发布数据的 url 的动态 url。比这样做:
let url = " route('old_url') ";
url = url.replace('old_url', post_url);
$.ajax(
type:'POST',
url:url,
data:field_name:field_value,
success:function(data)
);
【讨论】:
【参考方案2】:这里的问题是 PHP 被渲染并与服务器的响应一起发送。这意味着它对您的 javascript 一无所知。
有一些包旨在替代客户端的功能,或者您可以编写自己的辅助函数来解决它。
但是,很遗憾,您将无法实现这种精确的仿真。
【讨论】:
看看@Francisco Fernandes 的评论 @IstiaqueAhmed 我的第二段基本上解决了这个事实。you won't be able to achieve this exact emulation unfortunately
- 什么意思?
@IstiaqueAhmed 正如我所说的那样 - 您不能直接与路由管理器交互,但您可以使用库或替换功能,这正是提供的链接所做的。跨度>
以上是关于在 laravel 刀片路由中使用 JavaScript 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何从刀片模板中的 Javascript 文件重定向 Laravel 路由