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