本文介绍了来自Jetstream/Fortify的Laravel本地化和路线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个新的Laravel项目要做。我们希望提供多种语言版本。
我从JetStream开始这个项目。身份验证等的路由由Jetstream/Fortify自动处理。然后我添加了https://github.com/mcamara/laravel-localization来处理本地化。它适用于我自己创建的路线:
Route::group(
[
'prefix' => LaravelLocalization::setLocale(),
'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
], function()
{
Route::get('/', function () {
return view('welcome');
});
Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
});
但是如何在Jetstream和Fortify处理的路由上设置群、前缀和中间件?
[编辑]
根据@tefo的一些建议,我正在尝试添加一个中间件来处理区域设置。添加:
Fortify.php:
'path' => '{lang}',
'middleware' => ['web', 'setLang']
新中间件设置语言:
class SetLang {
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle(IlluminateHttpRequest $request, Closure $next) {
// $lang = 'en';
// $request->attributes->add(['lang' => 'en']);
$request->route()->setParameter('lang', 'en');
// $request->request->set('lang', 'en');
return $next($request);
}
}
已将中间件添加到$routeMiddleware
。
尝试联系http://mylaravel/en/login
时收到此错误:
ErrorException
Missing required parameters for [Route: login] [URI: {lang}/login]. (View: /var/www/resources/views/auth/login.blade.php)
推荐答案
最终成功完成此操作。我只是简单地禁用了Fortify和Jetstream中的路由,复制了它们,并将它们推送到我分组的前缀路由中。仍在使用https://github.com/mcamara/laravel-localization,但它应该以任何您想要的方式工作--创建您自己的系统或其他什么,只要您控制好路线就可以了。
在Jetstream ServiceProvider中:
public function register() {
Jetstream::ignoreRoutes();
}
在FortifyServiceProvider中:
public function register() {
Fortify::ignoreRoutes();
}
并将路由从Fortifyvendor/laravel/fortify/routes/routes.php
和Jetstreamvendor/laravel/jetstream/routes/livewire.php
复制到您的web.php
文件中,该文件包含您需要的前缀。
这篇关于来自Jetstream/Fortify的Laravel本地化和路线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!