国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【已解決】使用 illuminate/validation 驗(yàn)證器無(wú)法支持中英文切換

jacknum1

插件版本

"php": ">=7.2",
"workerman/webman-framework": "^1.4.3",
"illuminate/validation": "^9.52",
"symfony/translation": "^6.0"

預(yù)期效果

采用APIPOST接口請(qǐng)求軟件,通過(guò)傳header參數(shù)accept-language實(shí)時(shí)更換語(yǔ)言

實(shí)際問(wèn)題

采用locale()設(shè)置語(yǔ)言中間件,本地語(yǔ)言包完全可以切換,但是illuminate/validation插件無(wú)法實(shí)時(shí)切換語(yǔ)言,只能重啟項(xiàng)目后生效,想大佬幫忙看看怎么回事
截圖

程序代碼

語(yǔ)言中間件代碼

方式一和方式二都試過(guò)都是同樣的效果

namespace hope\middleware;

use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class Lang implements MiddlewareInterface
{
    /**
     * @param Request $request
     * @param callable $handler
     * @return Response
     */
    public function process(Request $request, callable $handler): Response
    {
        // 方式一:通過(guò)設(shè)置session
        $session = $request->session();
        $session->set('lang', getAcceptLang());
        // 方式二:通過(guò)實(shí)時(shí)獲取accept_language設(shè)置
        locale(getAcceptLang());
        var_dump(getAcceptLang());
        return $handler($request);
    }
}
驗(yàn)證器代碼

通過(guò)手動(dòng)修改語(yǔ)言參數(shù)translationLocale是會(huì)手動(dòng)生效的(因?yàn)轫?xiàng)目會(huì)重啟),但是當(dāng)?shù)谝淮卧O(shè)置英語(yǔ)en參數(shù)進(jìn)行接口軟件APIPOST調(diào)試是可以生效的,但是第二次設(shè)置中文zh_cn參數(shù)則不生效!

  public static function getInstance(string $translationLocale = 'zh_cn'): Factory
    {
        if (null === static::$instance) {
            $translationPath = hope_path() . '/resource/translations';
            $transFileLoader = new FileLoader(new Filesystem, $translationPath);
            $translator = new Translator($transFileLoader, session('lang'));
            static::$instance = new Factory($translator);
        }

        return static::$instance;
    }

初步設(shè)想

我想是不是代碼緩存了,還是通過(guò)上次請(qǐng)求過(guò)的參數(shù)響應(yīng)結(jié)果。希望大佬們可以幫忙看看怎么回事

1656 4 0
4個(gè)回答

caylof

整個(gè)單例模式,當(dāng)然是只生效第一次,目測(cè)是這個(gè)原因造成的。

  • 暫無(wú)評(píng)論
luohonen

在webman里面,不要寫(xiě) getInstance 這種東西

  • 暫無(wú)評(píng)論
法師

截圖
你用的單例,所以這個(gè)初始化語(yǔ)言代碼只會(huì)執(zhí)行一次,第一次是初始化的時(shí)候是 zh_cn ,那么以后所有請(qǐng)求都是zh_cn 了,這個(gè)應(yīng)該很好理解。你應(yīng)該每種語(yǔ)言都初始化一個(gè)instance,然后根據(jù)語(yǔ)言選擇不同的instance

public static $instance = [];
public static function getInstance(string $translationLocale = 'zh_cn'): Factory
    {
        if (!isset(static::$instance[$translationLocale]) {
            $translationPath = hope_path() . '/resource/translations';
            $transFileLoader = new FileLoader(new Filesystem, $translationPath);
            $translator = new Translator($transFileLoader, $translationLocale);
            static::$instance[$translationLocale] = new Factory($translator);
        }

        return static::$instance[$translationLocale];
    }

這樣才對(duì)

xtn

大佬 請(qǐng)問(wèn)你是如何使用illuminate/validation的?我使用的時(shí)候報(bào)錯(cuò)提示A facade root has not been set.

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??