2016-01-31 1 views
1

EDIT: Это можно сделать, добавив переменную в файл cookie Laravel на клиенте, используя jQuery? Я понимаю, что Cookie прилагается к запросу во время GET?Laravel 5.2 добавить переменную к запросу с помощью jQuery


Можно ли добавить переменную в $request контейнера в Laravel 5.2 с использованием JQuery перед выполнением запроса GET маршрута?

По существу, я пытаюсь передать значение в запрос GET и оставить его с URL как параметр (и скрытый от пользователя).

Мой HTML является по существу меню:

<ul class="sidebar-nav nav-pills nav-stacked " id="menu"> 
    <li id="menu-1"> 
     <a href="app.url/1">Menu 1</a> 
    </li> 
    <li id="menu-2"> 
     <a href="app.url/2">Menu 2</a> 
    </li> 
    <li>.....</li> 
</ul> 

Когда ссылка a нажата, я хочу, чтобы перехватить это и добавить

menuState = 'state'; 

К $request контейнера, а затем разрешить события клика маршрут до пункта назначения href.

Сейчас в Laravel конце концов я Shoule быть в состоянии получить доступ к его значение как:

$request->input('menuState'); 

возможно на том, что по существу GET запрос ли это так что нет формы их размещения?

Это пример добавления URL переменной

<a onclick="addURL(this)" href="app.url/1">Menu 1</a> 

function addURL(element) 
{ 
    $(element).attr('href', function() { 
     return this.href + '&menuState=10'; 
    }); 
} 

Можно ли это сделать?

<a onclick="addURL(this)" href="app.url/1">Menu 1</a> 

function addURL(element) 
{ 
    ---> ADD menuState = value to $request container, then continue with GET request 
} 
+0

Так что используйте метод POST, если вы не хотите, чтобы строки запроса отображались. Чтобы добавить значение поля в JS: document.myformname.fieldname = fieldvalue, тогда сделайте document.myformname.submit(), если вы хотите отправить с помощью javascript. – TurtleTread

+0

Hi @JoeS, понимать. Но я пытаюсь сделать это с помощью GET, поскольку я не отправляю форму как таковую, но скорее активирую перенаправление ссылок с помощью запроса GET. Я пытаюсь избежать ручного обращения запросов к POST, так как это путает маршрутизацию приложений. Это для главного меню приложения. – TheRealPapa

+0

Итак, это делается в стиле отдыха и HTTP GET-глаголе, что означает, что вы можете сделать /url/id/action/action2..etc. Поскольку вы используете laravel, вы можете прочитать документ Routing, чтобы он был реализован. Опять же, я не знаю, что вы можете скрыть его с помощью метода GET. – TurtleTread

ответ

0

Хорошо, поэтому я попытаюсь представить более полное решение вашего вопроса.

Как вы указали, ваш URL-адрес меню, вероятно, должен выглядеть лучше; они должны иметь в себе слова, а не цифры (это тоже полезно для SEO). <a> href attr может быть установлен только на относительный url, например href = 'home' или href = 'about'.

Теперь вопрос в том, как передать состояние меню для всех страниц. Вероятно, вы не хотите использовать переменную $ request в этом случае, поскольку состояние меню, которое, я думаю, должно быть предварительно определено для разных страниц. Контроллеры должны установить некоторый массив переменных состояния меню, который содержит включение/выключение для каждого меню. (или просто строка, установленная для того, в какое меню включено, но затем вам нужно пройти через меню и выполнить условную проверку, ваш выбор).

Возможно, вы можете использовать композитор представления для меню в этом случае или просто использовать share() -> share в serviceProvider, если вы ленивы. Проверьте необходимые условия и пройдите результат. В этом случае я думаю, что состояние меню должно быть ясно из URL-адреса, доступного только в скрипте с помощью Route :: url().

Редактировать: Ok. Поэтому, наконец, я понимаю, что происходит после этой дискуссии. Вот что я предлагаю. Я бы не стал пытаться сохранить состояние меню. Большинство сайтов имеют эффект наведения, когда меню просто расширяется при наведении курсора мыши, затем вы нажимаете на меню, чтобы перейти на другую страницу, на которой вы хотите больше видеть содержимое, чтобы меню просто свернулось. Если пользователь действительно хочет, чтобы выбор имел возможность развернуть меню по умолчанию, сделайте это настройкой предпочтений в своем профиле.Оставьте переключатель JavaScript, однако, поскольку они могут по-прежнему хотят, чтобы свернуть меню иногда :)

+0

Ах, извините @JoesS, но либо вы меня неправильно понимаете, либо я вас неправильно понимаю! У меня есть меню, которое открывается и закрывается. Это состояние, которое я хочу передать в приложение через GET. У меня уже есть все маршруты и ссылки на них в моем коде таким образом. У меня есть таблица, связывающая маршруты к названиям страниц, коду css, slug, другим. Имеет смысл? Как бы вы передавали данные 'menu = open' через get, избегая url-варов и Laravel (я не хочу этого на каждом маршруте), а также AJAX, так как я не хочу, чтобы мой сервер пинговал для открытия/закрытия меню , Если это невозможно, вернитесь к чертежной доске. Спасибо – TheRealPapa

+0

Хорошо. Я спрошу вас, как определяется состояние меню. – TurtleTread

+0

Привет @JoeS меню активируется jQuery для открытия или закрытия. Я просто хочу загрузить следующую страницу (сообщение или получить) с помощью меню в этом состоянии без видимости через URL-адрес и без уведомления Ajax об изменении состояния при каждом нажатии. Я также хочу избежать sessionStorage на клиенте. Меню анимируется и, если переключается на загрузку страницы, вы видите, что это делает это. Я изменю состояние меню в PHP до загрузки следующей страницы. – TheRealPapa

0

IMO самый простой способ, чтобы предотвратить ссылку перенаправления после щелчка на a и добавить событие щелчка, чтобы захватить этот щелчок затем использовать Jquery $.get() метод добавления параметры, которые вы хотите, и пошлите свой запрос:

$('#menu').on('click', 'a', funtion(e){ 
    e.pereventDefault(); //prevent link redirection after click 

    $.get($(this).attr('href'), {menuState: 'state'}, function(response){ 
     //response variable contain response from laravel controler 
    }) 
}); 

Надеюсь, что это поможет.