簡體   English   中英

Laravel 5 Route Filter正則表達式

[英]Laravel 5 Route filter regex

我正在嘗試實現一個支持兩種語言的laravel網站(已實現pt和en並帶有pt后備功能)。 所需的網址應該是www.example.com/pt/list(對於葡萄牙語)和www.example.com/en/list(對於英語)。 如果未插入任何語言,則默認情況下應使用pt。 我有以下代碼:[routes.php]

Route::filter('localization', function() {
    App::setLocale(Route::input('lang'));
});
Route::group(['prefix' => '{lang?}', 'before' => 'localization'], function() {
    Route::get('/', 'HomeController@index');
    Route::get('/list','ListController@index');
});

定義語言后,所有方法都可以正常工作,否則,即使沒有指向該URL的路由器,它也將始終重定向到主頁。 我如何避免這種行為? 是否可以對組進行正則表達式? 猜猜傑森·劉易斯的增強型路由器僅適用於Laravel 4

編輯1:我可以使用htaccess中的重定向來解決它(如果沒有語言前綴,則可以使用/ pt /前綴進行重定向,但是我猜必須有另一種方式)

編輯2:可以使用下面的代碼修復它,但它也涉及使用重定向,我想可以避免這種情況,並且url始終具有language參數

Route::filter('localization', function() {
    $accepted_language = array("pt","en");

    $first_segment = Route::input("lang");
    if(in_array($first_segment,$accepted_language))
    {
        /*ALL GOOD, Language in URL*/
        App::setLocale(Route::input('lang'));
    }
    else
    {
        /*REDIRECT WITH LANGUAGE*/
        $segments   = Request::segments();
        $imploded   = implode("/",$segments);
        $url        = "/pt/".$imploded;
        return Redirect::to($url, 301);
    }

});

在我最近的項目中,我遇到了同樣的問題。 您可以這樣做:

$languages = array('en', 'pt');
$locale = Request::segment(1);

if (in_array($locale, $languages))
{
    App::setLocale($locale);
}
else
{
    redirect('pt')->send();
}

Route::group(['prefix' => $locale], function()
{
    Route::get('/', 'HomeController@index');
    Route::get('list','ListController@index');
});

或將語言環境檢查移到單獨的中間件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM