首页 文章

在laravel中以相同的形式发布

提问于
浏览
1

我正在尝试在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 .

我真正想要做的是在搜索按钮下方显示搜索结果 .

Edit ..

除了一件事,现在一切都很好 .

我在我的视图中显示数据(获取我页面上与搜索条件匹配的所有用户的列表)但是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

    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
    
  • 2

    您必须告诉Laravel您要使用 get 方法向服务器提交表单 . 否则,Laravel默认使用 post 方法 .

    请尝试以下方法:

    {{ Form::open(array('url' => '/directory', 'method' => 'get', 'class' => 'form-horizontal')) }}
    
                                                            ^^^
    

相关问题