laravel 5通过MenuItiem-> Jquery-> Controller->中间件更改区域设置中间件

时间:2015-05-27 11:28:18

标签: laravel laravel-middleware

所以昨天我完成了大部分工作,现在我处于能够通过中间件修改Locale(在Laravel 5中使用语言)的最后阶段。

该过程如下:

用户从下拉菜单中选择一种语言,这个点击的值通过Ajax传递给Controller,控制器修改其语言环境。但它并没有在这里结束。在它通过过滤器之前。现在它是中间件。我已经做了很多关于中间件的发现,我将在这里包括。最后一个阶段还没有做出预期的改变:

完整代码

HTML

<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Pick Language<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{{URL::route('index')}}" class="choose-language" id="french" data-value="fr">Français</a></li>
<li><a href="{!!URL::route('index')!!}" class="choose-language" id="english" data-value="en">English</a></li>  
<li><a href="{{URL::route('index')}}" class="choose-language" id="spanish" data-value="es">Castellano</a></li>                                
<li><a href="{{URL::route('index')}}" class="choose-language" id="german" data-value="de">Deutsch</a></li>                                
<li><a href="{{URL::route('index')}}" class="choose-language" id="russian" data-value="ru">русский</a></li>  
</ul>
</li>

JQUERY

<script>
    $(document).ready(function () {
    $('.choose-language').on('click', function () {
    var selectedlanguage = $(this).data('value');
    $.ajax({
        url: 'languagechooser',
        data: { 'locale' : selectedlanguage},
        timeout:3000,
        type: "post",
        cache: false,
        success: function (savingStatus) {
            console.log(savingStatus);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $('#errores').text("Error .");
        }
    });
});
});

CONTROLLER

public function languagechooser()
{

    \Session::set('locale', \Input::get('locale'));

}

MIDDLEWARE(可能是错误的地方)

<?php namespace App\Http\Middleware;

use Closure;

class Language {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        app()->setLocale(\Session::get('locale'));
        return $next($request);

    }

}

更新

在荷兰Luceo的有用意见之后,我取得了积极进展。

我已在Kernel.php的受保护$ middleware中注册了该类 我添加了:在我的控制器类的顶部使用App \ Http \ Middleware \ Language。但我现在从Jquery Ajax得到Error的消息,当它无法在控制器上完成它的工作时,它返回我&#34;错误&#34;

我不知道错误现在是在Ajax中还是在中间件上有待处理的事情。

MIDDLEWARE KERNEL.PHP

 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\Language',

更新II

为了查明Ajax错误,我用这个替换了错误函数,它提供了更多细节。错误说(我离线),我不是,因此控制器和中间件之间的某些连接似乎误导了Ajax,或者Controller必须返回Ajax期望的东西。

error:function(x,e){
            if(x.status==0){
                alert('You are offline!!\n Please Check Your Network.');
            }else if(x.status==404){
                alert('Requested URL not found.');
            }else if(x.status==500){
                alert('Internel Server Error.');
            }else if(e=='parsererror'){
                alert('Error.\nParsing JSON Request failed.');
            }else if(e=='timeout'){
                alert('Request Time out.');
            }else {
                alert('Unknow Error.\n'+x.responseText);
            }
        }

路线文件

Route::post('home', array(
    'as' =>'languagechooser',
    'uses' =>'LanguageController@languagechooser'

));

更新III

我修改了Ajax中的URL并改为编写:

url: {{URL::route('languagechooser')}},

现在我没有得到#34;你离线&#34;错误,但仍未修改语言环境..

0 个答案:

没有答案