【发布时间】:2017-02-25 17:26:08
【问题描述】:
我正在尝试使用 Laravel 和 Vue 创建 SPA 网站。我也想做本地化。但是本地化构建只是使用没有 Vue 的 laravel。如果我使用正则表达式删除 url (blog.com/#/) 中的 # 像这样web.php:
Route::group(['middleware' => 'locale'], function() {
Route::get('/{vue?}', function() {
return view('main');
})->where('vue', '[\/\w\.-]*');
});
Route::get('lang/{locale}', function($locale) {
Session::put('locale', $locale);
return back();
});
它起作用了.. 但不幸的是,这破坏了我的本地化网址:
<li><a href="{{url('lang/id')}}"><img src="{{asset('images/flag/id.png')}}"></a></li>
<li><a href="{{url('lang/en')}}"><img src="{{asset('images/flag/en.png')}}"></a></li>
但是如果我从那条路线中删除了哪里
Route::get('/{vue?}', function() {
return view('main');
})->where('vue', '[\/\w\.-]*');
变成这样:
Route::get('/{vue?}', function() {
return view('main');
});
它适用于本地化,但不适用于某些 url,例如: http://blog.com/post/create
但如果我将网址更改为http://blog.com/create,它就可以工作..
网址测试:
工作:
- blog.com
- blog.com/about
- blog.com/create
不工作
- blog.com/posts/create
这是 vue 路由routes.js
import VueRouter from 'vue-router'
let routes = [
{
path: '/',
component: require('./pages/Home')
},
{
path: '/about',
component: require('./pages/About')
},
{
path: '/posts/create',
component: require('./posts/create')
}
]
export default new VueRouter({
routes,
linkActiveClass: 'is-active',
mode: 'history'
})
【问题讨论】:
-
如果您输入
path: '/create',而保留component: require('./posts/create')原样呢? -
您的建议确实有效。但我只想让网址变成这样:blog.com/posts/create。如果我从路线中删除它(blog.com/posts/create)没有工作。如果可以选择,我只想使用正则表达式使 url
{{url('lang/id')}}用于本地化。 -
我不确定你的意思是“没用”(我真的不明白它做了什么),所以也许可以详细说明一下。
-
如果我在 laravel 的路由 (web.php) 中没有使用正则表达式,它会使 vue routes.js 中的路由不适用于
/posts/create,但适用于本地化 url @987654334 @。如果我在路由 (web.php) 中使用正则表达式,它会破坏本地化 URL{{url('lang/id')}}或无法翻译页面,但它适用于/posts/create。我知道这很困惑。 -
你可以使用一个重定向;所以也许路径:'/create' 和重定向:'/posts/create'。除了重新考虑你的正则表达式之外,我现在只能建议......