我正在尝试在Laravel中构建一个搜索表单,以便当用户按下搜索按钮时,所有符合搜索条件的联系人都会显示在同一页面上。
以下是我的表格:
{{ Form::open(array('url' => '/directory', 'class' => 'form-horizontal')) }}
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">Last Name</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="lastname" placeholder="Enter Last Name">
</div>
</div>
<div class="form-group ">
<label for="phone" class="col-sm-2 control-label">Phone</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="phone" placeholder="Enter Phone number">
</div>
</div>
<div class="form-group">
<label for="inputEmail1" class="col-sm-2 control-label">Email</label>
<div class="col-sm-6">
<input type="email" class="form-control" id="inputEmail1" placeholder="Enter Email - leave blank if you are not sure">
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" class="btn-u btn-u-green">Search</button>
</div>
</div>
<div class="well">
@foreach($users as $user)
<li>{{$user->firstname}} {{$user->lastname}}</li>
@endforeach
</div>
{{ Form::close() }}
下面的屏幕截图给出了我的表单的图示:
我的路线定义如下:
Route::get('/directory', 'UsersController@filter');
现在,每当我按下搜索按钮时,我都会收到MethodNotFound exception
。
我真正想做的是在搜索按钮下方显示搜索结果。
修改..
除了一件事,现在一切都很好。
我在我的视图中显示数据(获取我页面上与搜索条件匹配的所有用户的列表)但是for循环没有被执行。
<li>Count of users = {{ $users->count() }}</li>
<li>{{$users->first()->lastname}}</li>
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
所以:虽然我可以在结果记录数组中看到第一个用户的count和 lastname ,但是foreach循环没有被执行。
我做错了什么?
答案 0 :(得分:2)
Laravel路由绑定到METHOD格式,因此您还需要创建一个POST路由:
Route::post('/directory', 'UsersController@filter');
您还需要在表单字段中添加名称:
name="lastname"
代表
<input type="text" name="lastname" class="form-control" id="lastname" placeholder="Enter Last Name">
对所有其他人而言。
处理该查询的控制器方法可能如下所示:
<?php
class UsersController extends Controller {
public function filter()
{
$users = User::query();
if (Input::has('lastname'))
{
$users->where('lastname', Input::get('lastname'))
}
if (Input::has('phone'))
{
$users->where('phone', Input::get('phone'))
}
return View::make('your.view')
->with('userCount', $users->count());
->with('users', $users->get());
}
}
在您看来,您可以:
<li>Count of users = {{$userCount}}</li>
@foreach ($users as $user)
<li>
{{ $user->id }} - {{$user->lastname}}
</li>
@endforeach
答案 1 :(得分:0)
您必须告诉Laravel您要使用get
方法向服务器提交表单。否则,Laravel默认使用post
方法。
尝试以下方法:
{{ Form::open(array('url' => '/directory', 'method' => 'get', 'class' => 'form-horizontal')) }}
^^^