Выберите значение от вида к контроллеру - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь передать выбранное значение в раскрывающемся списке из моего представления в мой контроллер, чтобы я мог сделать запрос позже.

Вот мое представление с объектом выбора:

 <Select class="selectsector" id="ColumnType" name="ColumnType">
    <option value=""> Select something </option>
    <option value="">  option 1 </option>
    <option value="">  option 2 </option>
 </select>

Затем, в соответствии с документацией и множеством ответов / примеров, я пытаюсь получить значение извыберите в этой строке:

 {{ route('trend', ['ColumnType' => $ColumnType->ColumnType])}} 

Мой маршрут:

 Route::get('kitysoftware/ColumnType/{ColumnType}', [
 "uses" => 'SubSectorsBPIsDataController@TrendFilter',
 "as" => 'trend'
  ]);

Мой контроллер:

  public function TrendFilter($ColumnType)
  {
  $SelectedTrend = DB::table('SubSectorsBPIsData')->select('SectorID', 'ColumnType')->where('ColumnType', $ColumnType)->get();
    echo $selectedTrend; //or whatever else i want to do        
}

Ошибка Я продолжаю получать: Неопределенная переменная: ColumnType (Просмотр: ... Я попытался изменить несколько имен переменных в этой строке: {{route ('trend', ['ColumnType' => $ ColumnType-> ColumnType])}} * Откуда она берется из этой неопределенной переменной: $ ColumnType? Я не перезагружаю страницу, так как хочу собрать несколько значений раскрывающихся списков и затем выполнить запрос. Не уверен, что получил правильный подход,может быть, есть лучший способ заставить его работать. JavaScript может быть?
Заранее спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Для пояснения: код, который вы пишете в своих представлениях, является HTML.Если вы используете {{...}}, то код в фигурных скобках сначала проверяется в php.Все это происходит на вашем сервере.Переменная $ColumnType не существует, когда это происходит (и не позднее).Пользователь даже не видел ваш сайт, когда ваш сервер пытается узнать, каково значение переменной.

Чтобы отправить данные от пользователя на ваш контроллер, я предлагаю использовать форму:

<form action="{{route('trend')}}" method="POST">
    <select class="selectsector" id="ColumnType" name="ColumnType">
        <option value=""> Select something </option>
        <option value="option1">option1</option>
        <option value="option2">option2</option>
    </select>
    <input type="submit"></input>
</form>

Когда форма отправлена, браузер автоматически отправит запрос с параметром ColumnType вашему контроллеру.Если вы хотите использовать POST, измените определение маршрута на Route::post.Вы можете получить доступ к значению параметра следующим образом:

public function TrendFilter(Request $request)
{
    $selectedOption = $request->input('ColumnType');
}

РЕДАКТИРОВАТЬ Адресация к вашим комментариям:

Если вы используете подход POST, вам не понадобится{ColumnType} -путь в URL.Выбранный параметр передается через запрос и не отображается в URL.

Если вам нужны параметры в URL (это может быть полезно, если вы хотите поделиться сайтом, указав URL),затем используйте GET.Ваш браузер добавит выбранные параметры в качестве параметров к URL-адресу.Например:

?options=option1

В обоих случаях вы можете получить доступ к выбранной опции в вашем контроллере, как я описал выше.

Вы получаете ошибку «Route Not Found», потому что функция route( name ) принимает имя маршрута в качестве аргумента.В вашем случае это будет trend, установленное 'as' в вашем определении маршрута.

Также обратите внимание, что вам, вероятно, понадобится второй обработчик в вашем контроллере, чтобы принять обратную связь формы и выполнитьзапрос.Затем вы можете перенаправить на предыдущую страницу (тот же вид) с обновленными значениями (data) и сохранить выбранные параметры (withInput()).

public function acceptForm(Request $request){
    $selectedOption = $request->input('ColumnType');
    data = doQuery($selectedOption)...
    return redirect()->back()->with(data)->withInput();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...