javascript - Laravel 路由的 Javascript 中的全局变量 - 这是个好主意吗?

标签 javascript php laravel-5 vue.js

我使用 View Composer 创建了一些代码,将我的路线集合传递到所有 View 的前端,这样我就可以通过与它们关联的命名路线来访问 Vuejs 中的所有 Laravel 路线。

例如,要使用 vue 组件上传图像,不要将我的上传路由传递到 Vue 组件,而是将其列为全局变量的一部分:

var uploadRoute     = _.find(globalRoutes, function(route) { return route.name == 'route-name.image.upload' });
$.post(uploadRoute, data) ... etc

我的问题是......这合理吗?我正在公开发布我的整个应用程序的路线。

谢谢

最佳答案

我认为您关于公开整个应用程序路线的预感是合理的。 IMO 你应该明确选择你需要的路线。因此,在这种情况下,您应该只公开 route-name.image.upload。您可以创建一个小型辅助函数来查找路由并将其与 URL 一起输出为 JSON。

function json_routes(array $routes)
{
   $return = [];

   foreach($routes as $route)
   {
       $return[$route] = route($route);
   }

   return new \Illuminate\Support\HtmlString(json_encode($return));

}

在你的主视图中:

var routes = {{ json_routes(["route-name.image.upload"]) }};

获取路线很简单:

routes['route-name.image.upload']; 

这是我能想到的最基本的例子。您可以对其进行相当多的优化。只是一些想法:

  • 将路线放在中心位置,fx。配置元素:json_routes(config('app.json_routes'))
  • 构建一个生成静态 .json 文件的命令,这样您就不会在每个页面加载时迭代路由。添加更多路线时请记住重新生成。
  • 创建一个函数而不是一个对象来获取路线。这允许您构建逻辑并在 js 中提供更像 Laravel 的感觉: function route(path){ return window.routes.hasOwnProperty(path) ? window.routes[path] : null ;}

  • (高级) 重写 Laravels 路由器逻辑并 Hook 到选项数组,允许您执行类似 Route::get('dashboard', '.. .', ['as'=>'dashboard', 'expose'=>true]);,然后使用 expose 选项在所有路由上动态生成前面提到的 json 文件.

关于javascript - Laravel 路由的 Javascript 中的全局变量 - 这是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38479302/

相关文章:

mysql - Wy 十进制数字没有按预期存储在 mysql 中

javascript - MongoError : failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFU SED 127. 0.0.1:27017]

javascript - jQuery Ajax promise : Throw Custom Exception and have it caught in outer fail()

javascript - 在表格中,选择 tr#myId 和下一个

php - php 中的动态 url 或页面

php - Laravel 事件监听器和缓存不起作用

javascript - 在已解决的 promise 中解决新数据

javascript - 在 javascript url 中附加 PHP 变量

PHP、两个连接、VPN 和 SSL

php - Laravel 5.1 - 使用 SQLite 的测试数据库在向下迁移时给出 'no such index' 错误()