Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-第一段为可选段_Php_Laravel 4_Laravel Routing - Fatal编程技术网

Php Laravel-第一段为可选段

Php Laravel-第一段为可选段,php,laravel-4,laravel-routing,Php,Laravel 4,Laravel Routing,我是拉威尔的新手,我希望我的网站是多语言的。我将所选语言slug存储在Session中。但是,如何使我的URL显示所选的语言: Route::get('/{lang?}/signup', array( 'as' => 'signup', 'uses' => 'UsersController@getSignup' )); -如果我使用URL::segment(1)获取第一个段并将其传递给会话一切正常。通过上面发布的路线,如果我打开第二个链接,我会得到4oh4 所以基本

我是拉威尔的新手,我希望我的网站是多语言的。我将所选语言
slug
存储在
Session
中。但是,如何使我的URL显示所选的语言:

Route::get('/{lang?}/signup', array(
    'as' => 'signup',
    'uses' => 'UsersController@getSignup'
));
-如果我使用URL::segment(1)获取第一个段并将其传递给
会话
一切正常。通过上面发布的
路线
,如果我打开第二个链接,我会得到4oh4

所以基本上,我想不出一个方法,既能使和工作

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

编辑:

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

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

另一个表存储网站中某些部分的翻译:
id
-(int)AI,
(例如注册表单名称),
(例如我的注册表单)

我在我的
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;
}

它如何区分

en

?

那只是两条线。唯一的办法就是打

http://example.com//signup
而不是

http://example.com/signup 
因为这样,您可以明确地告诉Laravel您没有传递第一个route参数。但这是行不通的,因为Laravel也不会理解,Github中有一个问题

这是你的选择之一:

Route::get('/signup/{lang?}' ...);
所以你可以把它当作

http://example.com/signup


这里的关键问题是,您需要将langs硬编码到控制器中,但它应该可以工作…

我不认为有两个指向相同内容的URL是一件好事(
/en/singup
/singup
)。我将重定向到
会话
中的存储语言。并使第一段始终具有lang代码。您可以将第一段与一个数组进行比较,该数组包含所需的所有语言代码的列表。@azeós,谢谢您的回复。我已经用详细的信息更新了我的问题。我没有在Laravel中使用
Locale
http://example.com/signup
http://example.com/signup/en
Route::get('/{lang?}/signup', array(
    'as' => 'signup',
    'uses' => 'UsersController@getSignup'
))->where('lang', '(en|br)');