gpt4 book ai didi

session - Laravel:区域设置 session : Controller 获取参数来更改它但它不能。你必须硬编码它

转载 作者:行者123 更新时间:2023-12-02 21:15:48 25 4
gpt4 key购买 nike

我尝试创建一个表单并取消 Ajax。是的,当我 var_dumped 并退出时,表单至少确实将参数发送到 Controller ,以查看它是否获得了新值,是的,它确实获得了新值,但是你猜怎么着?这是问题:

即使从 Controller 收到的 Input::get('locale') 是我从 Form 发送的,以下代码也无法更改 Session。

Controller :

public function languagechooser()
{
$session = \Input::get('language');
var_dump($session);exit;
\Session::set('locale',$session);

return\Redirect::back();
}

更改 session 的唯一方法是对其进行硬编码,就像这样(注意“en”:

public function languagechooser()
{
$session = \Input::get('language');
var_dump($session);exit;
\Session::set('en');

return\Redirect::back();
}

但我不明白为什么。一旦它从变量接收到它,它应该留在那儿,但看起来它没有。它毕竟是一个变量吗?但是在 youtube 上,phpacademy 做同样的事情(只使用 Laravel 4),而我使用 5

还有表单,只是一个表单

<form action="{!!URL::route('languagechooser')!!}" method  ="post">

<select class="form-control" name="language">
<option value="fr">fr</option>
<option value=en">en</option>
<option value="es">es</option>
<option value="ru">ru</option>
<option value="it">it</option>
<option value="de">de</option>
</select>
<button class="btn btn-primary pull-right" type="submit">Search</button>
{!!Form::token()!!}
</form>

最佳答案

routes.php

Route::get('/', 'WelcomeController@index');

Route::post('languagechooser', [
'as' => 'languagechooser',
'uses' => 'WelcomeController@changeLanguage'
]);

查看 - welcome.blade.php

<!-- I think this bit should help you out! -->
<p>
@if( Session::has('locale') )
Locale: {{ Session::get('locale') }} <br>
Message: {{ Lang::get('test.message') }}
@else
no session locale set
@endif
</p>


<form action="{!! route('languagechooser') !!}" method = "post">

<select class="form-control" name="language">
<option value="en">en</option>
<option value="es">es</option>
</select>

<button class="btn btn-primary pull-right" type="submit">Search</button>
{!!Form::token()!!}
</form>

Controller - WelcomeController.php

public function changeLanguage()
{
$lang = \Input::get('language');

\Session::put('locale', $lang);

return \Redirect::back();
}

创建中间件:php artisan make:middleware Locale

中间件 Locale.php

<?php namespace App\Http\Middleware;

use Closure;
use Session;
use App;
use Config;

class Locale {

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$language = Session::get('locale', Config::get('app.locale'));

App::setLocale($language);

return $next($request);
}

}

将此:'App\Http\Middleware\Locale' 添加到 Http\Kernel.php 文件中的 $middleware 数组,因此它是在每个请求上加载。

protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\Locale',
];

resources/lang/en/test.php

return [
'message' => 'hello'
];

resources/lang/es/test.ph`

return [
'message' => 'hola'
];

感谢此链接:https://laracasts.com/discuss/channels/general-discussion/where-to-setlocale-in-laravel-5-on-multilingual-multidomain-app

关于session - Laravel:区域设置 session : Controller 获取参数来更改它但它不能。你必须硬编码它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com