我用Laravel 10开发了多语言网站.一切都运行得很好,因为Composer不支持我的服务器上的laravel 10库,所以我创建了一个laravel 9项目并只移动了以下文件夹;

/app
/public
/resources
/routes
/composer.json

然后我做了Composer安装和php artisan优化,结果是成功的.但问题是,当我访问我的网站时,我收到以下错误:

setlocale(): Argument #1 ($category) must be of type int, Illuminate\Http\Request given

/app/Http/Kernel.php :

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        **\App\Http\Middleware\SetLocale::class**, // <- **locale class is here** 
    ],

    'api' => [
        // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];
protected $middlewareAliases = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \App\Http\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    **'setlocale' => \App\Http\Middleware\SetLocale::class,**
];

/app/Http/Middleware/SetLocale.php

class SetLocale {
    public function handle(Request $request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }
        return $next($request);
    }   
}

/routes/web.php

Route::get('/', function () {
    return redirect(app()->getLocale());
})->name('home');
Route::get('/setlang', [Controller::class, 'changeLanguage'])->name('setlang');
Route::group(
[
    'prefix' => '{locale}',
    'where' => ['locale' => '[a-zA-Z]{2}'],
    'middleware' => 'setlocale'
],
function () {
    Route::get('/', [Controller::class, 'homeview']);
});

推荐答案

您遇到的错误与PHP中的setlocale()函数有关.setlocale()函数用于为应用程序的不同方面设置区域设置信息,例如日期和时间格式、数字格式和字符串排序.

要解决此问题,您需要在/app/Http/Kernel.php文件中设置为make changes to the middleware aliases. 请确保SetLocale中间件文件的顶部有以下导入语句:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

Laravel相关问答推荐

如何在Laravel中从多行中获取合并数组?

如何在控制器中获取所需参数?

V-icon 在 Vuetify 3 中不显示图标

assertSee 由于 html 代码中的空格而失败

不能在 laravel 中使用控制器名称,必须使用命名空间

如何更改 laravel sanctum 返回message: Unauthenticated.

在 laravel 项目中放置 css 文件的位置

Laravel 5 将错误发送到Electron邮件

静态密码在默认的 Laravel 用户工厂中是如何工作的?

如何仅从 laravel FormRequest 中获取经过验证的数据?

Laravel 应用程序中应用程序键的意义是什么?

Laravel 5 干预中的图像验证

Laravel:验证 json 对象

[Vue 警告]:找不到元素:#app

Laravel 4 简单路由无法使用 mod_rewrite 和 .htaccess

Laravel 删除集合中的第一项

Laravel 5 Illuminate\Http\Request 的方法不允许静态调用

Laravel 更新查询

Laravel Eloquent 多对多查询 whereIn

限制自己重载外部 API 的速率