我正在尝试将下拉列表中的选定值从我的视图传递给控制器,以便稍后进行查询。
这是我与选择对象有关的视图:
<Select class="selectsector" id="ColumnType" name="ColumnType">
<option value=""> Select something </option>
<option value=""> option 1 </option>
<option value=""> option 2 </option>
</select>
然后根据文档和大量答案/示例,我尝试从此行的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?
预先感谢。
答案 0 :(得分:0)
要澄清:
您在视图中编写的代码是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方法,则URL中将不需要{ColumnType}
-子路径。所选选项通过请求传递,并且在URL中不可见。
如果要在URL中使用参数(这很有用,如果要通过共享URL来共享站点),请使用GET。然后,您的浏览器会将所选的选项作为参数附加到URL。像这样:
?options=option1
这两种方式都可以像我上面描述的那样在控制器中访问选定的选项。
由于route( name )
函数将路由名称作为参数,因此出现“找不到路由”错误。在您的情况下,该值为trend
,由路由定义中的“ as”设置。
还请注意,您可能需要在控制器中使用第二个处理程序,以接受表单反馈并进行查询。然后,您可以使用更新后的值(data
重定向到上一页(相同视图),并保留所选的选项(withInput()
)。
public function acceptForm(Request $request){
$selectedOption = $request->input('ColumnType');
data = doQuery($selectedOption)...
return redirect()->back()->with(data)->withInput();
}