JQUERY和Laravel 5.从View发送到Controller并修改语言环境:(代码几乎完成)

时间:2015-05-26 19:21:01

标签: jquery laravel

目标:

从下拉菜单中我点击一个项目,该值从该视图传递到控制器和控制器获取它,它修改了它的区域设置(也就是说,它将提供另一种导航语言)。如果我手动修改语言环境,我会得到一个很好的界面翻译,因为我已经在Lang Directories等创建了文件。

我遇到的轻微(但阻塞)问题:

由于下拉菜单中有很多项目(每个项目都对应一种语言),我必须精确指出“onclick”完全引用该项目。我不太确定语法是如何进行的,也许是来自父级的一些.children,所以当点击任何一个孩子时,它的值就会被发送。

这是代码:

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')}}" id="french" value="fr">Français</a></li>
        <li><a href="{{URL::route('index')}}" id="english" value="en">English</a></li>  
        <li><a href="{{URL::route('index')}}" id="spanish" value="es">Castellano</a></li>                                
        <li><a href="{{URL::route('index')}}" id="german" value="de">Deutsch</a></li>                                
        <li><a href="{{URL::route('index')}}" id="russian" value="ru">русский</a></li>  
        </ul>
    </li>

这里是JQUERY:

<script>
    $('#english').click(function () {
    var selectedlanguage = $('#english').val();
        $.ajax({
        url: '{!!"languagechooser"!!}>',
        data: { 'locale' : selectedlanguage},
        type: "post",
        cache: false,
        success: function (savingStatus) {

            echo "now in English";
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $('#lblCommentsNotification').text("Error encountered while saving the comments.");
        }
    });
});


</script>

这里是控制者

public function languagechooser()
{

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

     return \Redirect::back();


}

而且我相信我仍然必须在“过滤器”中进行操作,但是LARAVEL 5.0没有它们; INSTEAD我已经阅读过使用MIDDLEWARE,或者在服务提供商等的BOOT功能中使用这些功能。

public function boot(Router $router)
    {
        \Lang::setLocale(\Session::get('Locale'));

        parent::boot($router);
    }

我非常喜欢并理解整个过程,但我不掌握语法,Jquery应该能够从任何单击的语言中接收值。

非常感谢

1 个答案:

答案 0 :(得分:0)

将每个列表项中的锚点设为“选择语言”类。作为Tim Lewis mentioned in his comment,我也不确定是否允许在锚中使用value属性。我将其更改为数据属性以确保此标记有效。

<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,您可以为该类设置click-handler并使用$(this)获取单击的元素:

$('.choose-language').on('click', function () {
    var selectedlanguage = $(this).data('value');
    $.ajax({
        url: 'languagechooser',
        data: { 'locale' : selectedlanguage},
        type: "post",
        cache: false,
        success: function (savingStatus) {
            console.log(savingStatus);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $('#lblCommentsNotification').text("Error encountered while saving the comments.");
        }
    });
});

我稍微清理了你的JavaScript。没有必要用Blade回显AJAX URL。现在,对于data-value属性,您可以使用$(this).attr('data-value')$(this).data('value')获取其值。

希望这能回答你的问题!