我使用View Composer创建了一些代码,在那里我将我的Route Collection传递到所有视图的前端,这样我就可以通过与它们相关联的名为的路由访问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:
function route(path){ return window.routes.hasOwnProperty(path) ? window.routes[path] : null ;}
中提供更像Laravel的感觉(高级)重写Laravels路由器逻辑并挂接到选项数组中,允许您执行类似
Route::get('dashboard', '...', ['as'=>'dashboard', 'expose'=>true]);
的操作,然后使用expose
选项在所有路由上动态生成前面提到的json文件。