Неизвестная причина для локализации приложения, зашифрованной во время рендеринга? - PullRequest
0 голосов
/ 21 октября 2019

У меня необычная проблема.

У меня мультитенантное приложение Laravel, которое использует app () -> setLocale () для установки локали по умолчанию для арендатора

Когда я получаюлокаль в представлении / контроллере для любого арендатора или корневого приложения, я получаю зашифрованную строку, например, такую: eyJpdiI6ImtMdFI5Q05KSkU0WlJGaG9HUnF4K2c9PSIsInZhbHVlIjoic3ZVXC90SzVRRjBhUkpQdHJmcHNDUlE9PSIsIm1hYyI6IjE3MDQ4MjBiYTg0YzgwMWRmZmZlMTYxN2EwNDkwODE2MGJmZTNmNDJjOTAwYmE0ZGVlOWY0Yjc4YjIyNmEyMTAifQ==

, но если я получаю ее из AppServiceProvider сразу после ее установки, то правильный результат будет таким:en_AU

Мой composer.json:

"require": {
    "php": "^7.2",
    "appstract/laravel-options": "^2.2",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "^6.2",
    "laravel/passport": "^7.5",
    "laravel/telescope": "^2.1",
    "laravel/tinker": "^1.0",
    "spatie/laravel-activitylog": "^3.9",
    "spatie/laravel-query-builder": "^2.3",
    "spatie/laravel-schemaless-attributes": "^1.6",
    "spatie/laravel-sluggable": "^2.2",
    "spatie/laravel-translatable": "^4.2",
    "stancl/tenancy": "^2.1"
},
"require-dev": {
    "ahuggins/open-on-make": "^0.0.37",
    "ajthinking/tinx": "^2.6",
    "facade/ignition": "^1.4",
    "fzaninotto/faker": "^1.4",
    "laravel/homestead": "^9.2",
    "laravel/ui": "^1.1",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^3.0",
    "phpunit/phpunit": "^8.0"
}

Моя загрузка AppServiceProvider содержит этот код для изменения часового пояса и локали:

Tenancy::hook('bootstrapped', function ($tenantManager) {
    if (Schema::hasTable('options')) {
        // Set Tenant Timezone
        if (option_exists('timezone')) {
            $timezone = option('timezone');
            config(['app.timezone' => $timezone]);
            date_default_timezone_set($timezone);
        }

        // Set Tenant Local
        logger('Option: ' . option('locale', 'en'));
        app()->setLocale(option('locale', 'en'));
        logger('App: ' . app()->getLocale());
    }
});

Tenancy::hook('ended', function ($tenantManager) {
    if (Schema::hasTable('options')) {
        // Reset Timezone
        $timezone = env('APP_TIMEZONE', 'Australia/Adelaide');
        config(['app.timezone' => $timezone]);
        date_default_timezone_set($timezone);

        //Reset Local
        app()->setLocale(env('APP_LOCALE', 'en_AU'));
    }
});

Я пробовал даже какпростой маршрут как этот:

Route::get('', function () {
    return app()->getLocate();
}

и все равно не повезло

Я также попытался:

  • Удаление вышеуказанного кода в AppServiceProvider
  • Новый Laravel установил и установил все те же пакеты и сумел воссоздать его один раз с установкой / удалением ahiggins / open-on-make.

1 Ответ

0 голосов
/ 22 октября 2019

Хорошо. Таким образом, выясняется, что проблема связана с промежуточным программным обеспечением, которое я создал для сохранения языковой опции пользователя в значении cookie.

Проблема заключалась в том, что если его не существовало, я установил язык на false иследовательно, длинная строка.

Промежуточное программное обеспечение будет получать это значение каждый раз, когда пользователь загружает страницу.

...