JS中如何实现Laravel的route函数详解

发布时间 - 2026-01-10 23:00:04    点击率:

大家应该都知道在Laravel的路由模块里,我们可以给每一个路由设定一个名字,比如:

Route::get('/blog/{blog}', 'BlogController@show')->name('blog.show')

然后就可以通过

route('blog.show', ['blog' => 1])

来获取到这个路由的访问地址,后端跳转可以用

return redirect()->route('blog.show', ['blog' => 1]);

这样做的好处是如果发生url变更,比如我想把 '/blog/{blog}'改成 '/boke/{blog}' ,只需要改路由文件,别的地方都不用调整。

但这个仅限于后端,以及blade模板可以使用,稍微上点规模的网站都会把js文件单独拎出来,不会直接写在blade模板中,这样就导致js里发ajax请求时或者页面跳转时只能将请求地址写死,比如

location.href = '/blog/' + id;

这样万一路由发生变更,还得去修改js文件,如果同一个路由被多个js调用,漏改一两个还是很容易发生的。所以我就考虑能不能在js中实现一个类似后端的route函数。

最终的解决方案很简单,两个函数就搞定。

后端部分需要实现一个函数

function route_uri($name)
{
 return app('router')->getRoutes()->getByName($name)->getUri();
}

这个函数的作用是根据路由名称返回原始的路由地址,比如:

echo route_uri('blog.show'); // 会输出/blog/{blog}

前端也只需要一个函数:

let route = (routeUrl, param) => {
 let append = [];
 for (let x in param) {
  let search = '{' + x + '}';
  if (routeUrl.indexOf(search) >= 0) {
   routeUrl = routeUrl.replace('{' + x + '}', param[x]);
  } else {
   append.push(x + '=' + param[x]);
  }
 }
 let url = '/' + _.trimStart(routeUrl, '/');
 if (append.length == 0) {
  return url;
 }
 if (url.indexOf('?') >= 0) {
  url += '&';
 } else {
  url += '?';
 }
 url += append.join('&');
 return url;
}

注:这里引用了lodash

这个函数的作用是:

route('/blog/{blog}', {blog: 1}); //返回 /blog/1
route('/blog/{blog}', {blog: 1, preview: 1}); //返回 /blog/1?preview=1

然后就很简单了,在blade模板中定义:

var routes = {
 blog: {
  show: '{{ route_uri('blog.show') }}',
  update: '{{ route_uri('blog.update') }}',
  destroy: '{{ route_uri('blog.destroy') }}'
 }
};

在js文件里就可以:

$.post(route(routes.blog.update, {blog: 1}), {title: 'xxx', content: 'xxx'})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# laravel  # route函数  # route  # Laravel中前端js上传图片到七牛云的示例代码  # vuejs+element-ui+laravel5.4上传文件的示例代码  # Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作  # 详解用vue.js和laravel实现微信支付  # 详解用vue.js和laravel实现微信授权登陆  # 使用JS手写一个类似 Laravel 验证器的表单验证器  # 后端  # 很简单  # 只需要  # 跳转  # 一个函数  # 我就  # 多个  # 然后就  # 可以用  # 很容易  # 能在  # 我们可以  # 可以通过  # 这样做  # 还得  # 可以使用  # 会把  # 这篇文章  # 想把  # 能将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  在线制作视频的网站有哪些,电脑如何制作视频短片?  SQL查询语句优化的实用方法总结  百度浏览器如何管理插件 百度浏览器插件管理方法  Python高阶函数应用_函数作为参数说明【指导】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何基于云服务器快速搭建个人网站?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何在IIS中新建站点并解决端口绑定冲突?  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何实现数据库事务?(DB Facade示例)  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  使用Dockerfile构建java web环境  如何在阿里云通过域名搭建网站?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何用PHP工具快速搭建高效网站?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何用搬瓦工VPS快速搭建个人网站?  大连 网站制作,大连天途有线官网?  linux写shell需要注意的问题(必看)  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何在景安云服务器上绑定域名并配置虚拟主机?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何使用Eloquent进行子查询  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】