Laravel 4通过表单搜索模型

时间:2013-05-12 07:39:10

标签: laravel laravel-4

我使用Jeffrey Ways Generator通过scaffold命令生成一些代码。 我是OOP,Frameworks和Laravel的新手。我有一个工作方法,但只是想知道它是否是正确的方法。

所以基本上我想通过输入框搜索我的模型。

在模型的index.blade.php中,我将此代码放在页面顶部。

{{ Form::open(array('url' => 'tweets/', 'method' => 'get')) }}
   {{ Form::text('id') }}  
{{ Form::close() }}

现在我的推文控制器中有这个

public function index()
    {
        if(Input::get('id'))
        {
           return Redirect::action('TweetsController@show', array(Input::get('id')));
        }

        else 
        {

        $tweets = $this->tweet->all();
        // print_r($tweets);
        return View::make('tweets.index', compact('tweets'));
        }
    }

一切都按照我希望的方式运作,但这是正确的做事方式吗?

1 个答案:

答案 0 :(得分:1)

如果设置了Input :: get('id'),则不应该从show()方法重定向到index(),而是应该通过更改方式将表单直接提交到show方法URL。

{{ Form::open(array('url' => 'tweets/show/', 'method' => 'get')) }}
   {{ Form::text('id') }}  
{{ Form::close() }}

确保在app/routes.php中设置推文/ show /的路线:

Route::get('/tweets/show', 'TweetsController@show');

可能是更好的解决方案:

如果表单仅作为显示特定推文的链接(通过ID),则最好将路由和show()方法设置为:

Route::get('/tweets/show/{id}', 'TweetsController@show');

然后将show()文件中的TweetsController功能更改为:

public function show($id)
{
   // Load the tweet using $id as ID instead of Input::get('id')
}

从那时起,您只需创建一个普通链接(使用URL中的ID)即可链接到它:

<a href="{{ URL::to('tweets/show/'.$tweet->id) }}">View tweet</a>