在我的视图中,tests.index可以通过点击数据来自数据库的选择下拉列表来打开我的路线tests.show吗?
我的控制器:
public function index(Request $request)
{
$tests = DB::table('test')->distinct()->get();
return view('tests.index')->with('tests', $tests);
}
public function show($id)
{
$test = Test::findOrFail($id);
return view('tests.show', compact('test'));
}
我的观点索引:
<select id="apports" type="dropdown-toggle" class="form-control" name="apports" onchange="{{ route("tests.show", $test->id) }}">
<option value="choisir" selected disabled>Choisir</option>
@foreach($tests as $test)
<option class="apports" value="{{$test->id}}">{{$test->apports}}</option>
@endforeach
当我把路线放在这里时:onchange
我收到错误“Undefined variable:test”
当我在选择下面添加一个按钮时:
<a class="btn btn-small btn-success" href="{{ route("tests.show", $test->id) }}">Show</a>
我总是得到表格的最后一个ID ...
我宁愿没有按钮,只是当我在select中更改值时,返回tests.show ...有人可以帮我吗?
答案 0 :(得分:0)
$test
变量未在索引视图中设置,只有$tests
集合可用,因为您加载了该视图:
return view('tests.index')->with('tests', $tests);
您需要使用一些JavaScript来实现您的目标。 在索引模板中:
<select id="apports" type="dropdown-toggle" class="form-control" name="apports" onchange="goToTestPage(this.value)">
然后在您的JavaScript文件中:
function goToTestPage(id) {
window.location.href = "link to your show route/"+id;
}
如果测试ID由用户动态更改,则无法在PHP上设置它,因为PHP在用户实际执行选择之前执行,因此您必须依赖JavaScript
答案 1 :(得分:0)
您只需要一个javascript代码段来阅读选项更改并重定向您。
<select id="apports" type="dropdown-toggle" class="form-control" name="apports">
<option value="choisir" selected disabled>Choisir</option>
@foreach($tests as $test)
<option class="apports" value="{{ route("tests.show", $test->id) }}">{{ $test->apports }}</option>
@endforeach
</select>
<script>
$('select').on('change', function (e) {
var link = $("option:selected", this).val();
if (link) {
location.href = link;
}
});
</script>