Laravel - 第一部分是可选的

时间:2014-08-13 19:17:13

标签: php laravel-4 laravel-routing

我是Laravel的新手,我希望我的网站能够多语言化。我将所选语言slug存储在Session中。但是如何让我的网址显示选择了哪种语言:

Route::get('/{lang?}/signup', array(
    'as' => 'signup',
    'uses' => 'UsersController@getSignup'
));

http://example.com/en/signup - 如果我使用URL :: segment(1)获取第一个段并将其传递给Session,一切正常。根据我在上面发布的Route,如果我打开第二个链接,我会获得 4oh4

所以基本上我想不出能让http://example.com/en/signuphttp://example.com/singup同时工作的方法。

第一个链接应更改用户语言,第二个链接应使用Session中存储的值来获取此语言的结果。

修改

我正在尝试制作CMS之类的东西,我在数据库的表格中设置了一些键 - languages

id - (int)AI,name - (varchar) - 语言名称,prefix - (varchar) - 语言前缀

另一个存储网站中某些部分translations的表格: id - (int)AI,key(例如signup_form_name),value(例如我的注册表单)

我在helpers.php

中有这个功能
function _t($key, $language = NULL)
{
    if(is_null($language))
        $language = Session::get('currLang');
    $string = DB::table('translations')
        ->where('key', $key)
        ->pluck('value');
    return (!is_null($string)) ? $string : $key;
}

2 个答案:

答案 0 :(得分:1)

如何区分

en

来自

signup

这只是两个字符串。唯一的办法就是点击

http://example.com//signup

而不是

http://example.com/signup 

因为这样你明确地告诉Laravel你没有传递第一个路由参数。但这不起作用,因为Laravel也不会理解它,在Github中存在这个问题。

所以这是您的选择之一:

Route::get('/signup/{lang?}' ...);

所以你可以点击它

http://example.com/signup

http://example.com/signup/en

答案 1 :(得分:0)

Route::get('/{lang?}/signup', array(
    'as' => 'signup',
    'uses' => 'UsersController@getSignup'
))->where('lang', '(en|br)');

这里的关键问题是你需要将langs硬编码到你的控制器中,但它应该有用......