Laravel分页不附加搜索数据

时间:2015-07-10 14:19:04

标签: laravel laravel-4

我已经能够在我的表单上实现分页和appends(),它确实在第2页的url中显示了正确的值,尽管它并没有真正将值重新带回到表单中/ query,它只是重置搜索的实际数据并显示所有数据。

这是我的表单代码和附加内容。

{{ Form::open(array('class' => 'stdform', 'method' => 'post', 'name' => 'all')) }}

<input type="text" name="srch_lname" class="input-large" 
value="{{ Input::old('srch_lname', Session::get('srch_lname')) }}" />

<input type="text" name="srch_fname" class="input-large" 
value="{{ Input::old('srch_fname', Session::get('srch_fname')) }}" />
.
.
.
 <?php echo $employees->appends(array("srch_lname" => Session::get('srch_lname'),
 "srch_fname" => Session::get('srch_fname') ))->links(); ?>

我的控制器

public function getIndex() {

    $srch_lname = Session::get('srch_lname');
    $srch_fname = Session::get('srch_fname');


    $employees = vEmployees::co()->restrictions()
        ->where('lastname', 'LIKE', $srch_lname . '%')
        ->where('firstname', 'LIKE', $srch_fname . '%')
        ->paginate(10);

    return View::make('employees.index')
        ->with('employees', $employees)
        ->with('title', 'Users');
}

public function postIndex() {

    if (Input::has('btnSearch')) {

        return Redirect::to('/employees')->with('search', 1)
            ->with('srch_lname', Input::get('srch_lname'))
            ->with('srch_fname', Input::get('srch_fname'));
    else {
        return Redirect::to('/employees');
    }
}

完整表格

{{ Form::open(array('class' => 'stdform', 'method' => 'post', 'name' => 'all')) }}
    <div class="stepContainer">
        <div class="formwiz content">
            <h4 class="widgettitle">Search for an Employee</h4>
            <p>
                <label>Lastname</label>
                <span class="field">
                  <input type="text" name="srch_lname" class="input-large" 
                    value="{{ Input::old('srch_lname', Session::get('srch_lname')) }}" />
                </span>
            </p>
            <p>
                <label>Firstname</label>
                <span class="field">
                  <input type="text" name="srch_fname" class="input-large" 
                    value="{{ Input::old('srch_fname', Session::get('srch_fname')) }}" />
                </span>
            </p>
        </div>
    </div>
    <div class="actionBar" style="text-align: right;">
        <button class="btn btn-primary" name="btnSearch" value="1">
            Search for Employee(s)
        </button>
    </div>
{{ Form::close() }}

4 个答案:

答案 0 :(得分:1)

您需要将输入传递给视图,以便在从postIndex重定向到getIndex之后,Input :: old()具有可用的值。

在getIndex()中

,添加到View :: make()

    ->with('input', [ 'srch_lname'=> $srch_lname, 'srch_fname' => $srch_fname ]);

答案 1 :(得分:1)

您的分页查询字符串中似乎没有pageSearch值。试试这个。

<?php echo $employees->appends(
    array("btnSearch" => "1",
      "srch_lname" => Session::get('srch_lname'),
      "srch_fname" => Session::get('srch_fname') )
    )->links(); ?>

答案 2 :(得分:1)

我做了一个小样本,但由于我没有你的员工,我只是使用了User模型并注释掉了过滤,只是用作测试来传递和获取输入值。

请注意,对于来自Session的Input ::,在getIndex()和$ employees-&gt;的形式中,对appends()进行了更改。使用Input而不是Session,我没有在代码中看到您在会话变量中保存过滤器值的任何位置。

我还将Redirect :: to()更改为传递URL中的参数,因为它是一个get方法。

我进行了测试,过滤器值传递给getIndex()和表单字段,输入也通过分页链接正确传递。

class EmployeeController extends BaseController
{
    public
    function getIndex()
    {

        $srch_lname = Input::get('srch_lname');
        $srch_fname = Input::get('srch_fname');

        $employees = User::query()
            //->where('lastname', 'LIKE', $srch_lname . '%')
            //->where('firstname', 'LIKE', $srch_fname . '%')
            ->paginate(10);

        // make input available for page's form fields as old input
        Session::flash('_old_input', Input::all());

        return View::make('employees')
            ->with('employees', $employees)
            ->with('title', 'Users');
    }

    public
    function postIndex()
    {
        if (Input::has('btnSearch'))
        {
            return Redirect::to('/employees?search=1&srch_lname=' . urlencode(Input::get('srch_lname')) . '&srch_fname=' . urlencode(Input::get('srch_fname')));
            //return Redirect::to('/employees')->with('search', 1)
            //    ->with('srch_lname', Input::get('srch_lname'))
            //    ->with('srch_fname', Input::get('srch_fname'));
        }
        else
        {
            return Redirect::to('/employees');
        }
    }
}

表格和 - &gt;追加():

{{ Form::open(array('class' => 'stdform', 'method' => 'post', 'name' => 'all')) }}
<div class="stepContainer">
    <div class="formwiz content">
        <h4 class="widgettitle">Search for an Employee</h4>
        <p>
            <label>Lastname</label>
                <span class="field">
                  <input type="text" name="srch_lname" class="input-large"
                      value="{{ Input::old('srch_lname', Session::get('srch_lname')) }}" />
                </span>
        </p>
        <p>
            <label>Firstname</label>
                <span class="field">
                  <input type="text" name="srch_fname" class="input-large"
                      value="{{ Input::old('srch_fname', Session::get('srch_fname')) }}" />
                </span>
        </p>
    </div>
</div>
<div class="actionBar" style="text-align: right;">
    <button class="btn btn-primary" name="btnSearch" value="1">
        Search for Employee(s)
    </button>
</div>
{{ Form::close() }}
<?php echo $employees->appends(array("srch_lname" => Input::get('srch_lname'),
    "srch_fname" => Input::get('srch_fname') ))->links(); ?>

答案 3 :(得分:0)

我搞定了!我继续做一些研究,通过POST进行搜索确实是一个主要问题,在搜索本身和将数据保存到GET分页方法之间增加了差距。

对于将来遇到同样问题的人,我会完成以下所做的一切。

我首先创建了一个 Route ,它将指向我的EmployeesController中的新函数

Route::get('emp_srch', 'EmployeesController@search');

并在控制器

中创建了新功能
    public function search() {

    $srch_lname = Input::get('srch_lname');
    $srch_fname = Input::get('srch_fname');


    $employees = vEmployees::co()->restrictions()
        ->where('lastname', 'LIKE', $srch_lname . '%')
        ->where('firstname', 'LIKE', $srch_fname . '%')
        ->orderBy('lastname')
        ->orderBy('firstname')
        ->paginate(10);

    Session::flash('_old_input', Input::all());

    return View::make('employees.index')
        ->with('employees', $employees)
        ->with('title', 'Users')
        ->with('pagetitle', 'Employees')

}

它本质上是我在getIndex中所具有的功能,虽然重新排列了搜索功能的运行方式,我相信这是实际让我在这种情况下工作的决定性因素。

我还更改了表单上的网址,该网址指向我的新路线。除了更改表单以便它使用GET方法而不再使用POST。

{{ Form::open(array('url' => 'emp_srch', 'class' => 'stdform', 'method' => 'get')) }}

我确实要感谢 vladsch whoacowboy 帮助推动我朝着正确的方向前进。