【问题标题】:How use Regex in Localization Laravel 5.4 with Vue JS如何在本地化 Laravel 5.4 中使用正则表达式和 Vue JS
【发布时间】: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,它就可以工作..

网址测试:

工作:

  1. blog.com
  2. blog.com/about
  3. blog.com/create

不工作

  1. 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'。除了重新考虑你的正则表达式之外,我现在只能建议......

标签: php regex laravel vue.js


【解决方案1】:

现在解决了。我只是用这段代码来解决这个问题。

if ( ! request()->ajax() ) {
Route::group(['prefix' => 'posts'], function () {
    Route::get('/{vue?}', function() {
      return view('main');
    })->where('vue', '[\/\w\.-]*');
   });
 }

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 2019-12-07
    • 1970-01-01
    • 2017-07-23
    • 2021-08-18
    • 2013-05-28
    • 2017-01-18
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多