我使用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
我的问题是......这是明智的吗?我公开发布我的整个应用程序的路线。
由于
答案 0 :(得分:2)
我认为你对暴露整个应用程序路线的预感是合法的。 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'];
这是我能想到的最基本的问题。你可以优化它。只是一些想法:
json_routes(config('app.json_routes'))
.json
文件的命令,这样就不会在每次页面加载时遍历路由。记得在添加更多路线时重新生成。创建一个函数而不是一个对象来获取路径。这允许您构建逻辑并在您的js中提供更多类似Laravel的感觉:function route(path){ return window.routes.hasOwnProperty(path) ? window.routes[path] : null ;}
(高级)重写Laravels路由器逻辑并挂钩到options数组,允许你做Route::get('dashboard', '...', ['as'=>'dashboard', 'expose'=>true]);
之类的事情,然后动态生成前面提到的json文件在expose
选项的所有路线上。