在Form :: select上重新填充Laravel Input :: old()

时间:2014-09-24 20:22:33

标签: php laravel

使用Laravel 4,我无法在查询后重新填充选择字段输入:

// Route
Route::get('blog', 'BlogController@getPosts');


// BlogController
public function getPosts()
{
    $posts = Post::where('category_id', Input::get('category'))->paginate(25);

    $categories = Category::lists('title', 'id');

    return View::make('blog', compact('categories', 'posts'));
}

// Blog view    
{{ Form::open('method' => 'get', 'id' => 'form-search') }}

    {{ Form::select('category', $categories, Input::old('category')) }}

{{ Form::close() }}

我设法以这种方式工作,但这不是最好的做法

<select name="category" id="category">
    <option value="1" {{ (Input::get('category') == 1) ? 'selected="selected"' : null }}>Category 1</option>
    <option value="2" {{ (Input::get('category') == 2) ? 'selected="selected"' : null }}>Category 2</option>
    <option value="3" {{ (Input::get('category') == 3) ? 'selected="selected"' : null }}>Category 3</option>
</select>

我认为Input::old('category')无效,因为它是GET请求,我是对的吗?有没有解决方法?

更新:我终于使用Input::get()代替Input::old()

{{ Form::select('category', $categories, Input::get('category')) }}

2 个答案:

答案 0 :(得分:1)

您似乎甚至没有检索旧输入,您需要将其传递给视图。您可以通过以下两种方式之一来实现,最简单,最容易理解的是指定您想要传递输入。

return View::make('blog', compact('categories', 'posts'))->withInput();

此外,您不需要HTML中的标记。如果你只给它旧的输入值,Laravel会为你做这个。它运作得很好。

答案 1 :(得分:1)

也许这会起作用

public function getPosts()
{
    $category_id = Input::get('category');

    $posts = Post::where('category_id', $category_id)->paginate(25);

    $categories = Category::lists('title', 'id');

    return View::make('blog', compact('categories', 'posts', 'category_id'));
}

// Blog view    
{{ Form::open('method' => 'get', 'id' => 'form-search') }}

    {{ Form::select('category', $categories, $category_id) }}

{{ Form::close() }}