在laravel中以相同的形式发布

时间:2013-12-17 22:37:18

标签: php laravel laravel-4 form-submit

我正在尝试在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() }}

下面的屏幕截图给出了我的表单的图示:

search page

我的路线定义如下:

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循环没有被执行。

我做错了什么?

2 个答案:

答案 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')) }}

                                                        ^^^