Laravel 4 - 仅在一个自定义路由上的NotFoundHttpException

时间:2014-05-19 09:59:54

标签: php laravel laravel-4

我必须遗漏一些非常简单的东西,但我似乎无法找到它。所以我在我的routes.php中定义了我的资源,但我需要一个额外的路由,用于带有过滤器和东西的高级搜索页面,我的show / update / edit / create ...页面工作正常,但我的搜索页面不是。

所以在我的路线中:

 Route::resource('hostesses', 'HostessesController');
 Route::get('/hostesses/search', 'HostessesController@search');

我的主页上有一个搜索表单:

{{ Form::open(array('route' => 'hostesses.search', 'class' => 'navbar-form navbar-right')) }}
    <div class="form-group">
        {{ Form::text('search_term', '', array('class' => 'form-control')) }}
    </div>
    {{ Form::submit('Submit', array("class"=>'btn btn-default')) }}
{{ Form::close() }}

当我使用搜索表单时,我得到了NotFoundHttpException

在我的控制器中我有:

public function search()
{

    return View::make('hostesses.search');

}

我已经在views / hostesses / search.blade.php上创建了一个模板,其中包含一个简单的hello world消息来检查它是否有效,但我一直得到异常!

2 个答案:

答案 0 :(得分:1)

更改路线的顺序并定义&#39;形式为hostesses.search的命名路径

Route::any('/hostesses/search', array(['as' => 'hostesses.search', 'uses' => 'HostessesController@search');
Route::resource('hostesses', 'HostessesController');

因为正在发生的事情是/hostesses/$id的资源正在捕获search ID,并返回id search不存在的错误

另外 - 将您的路线更改为Route::any()。这意味着它将响应&#34; get&#34;和&#34;发布&#34;请求。

但是我建议将您的路线拆分为getSearch()postSearch()功能并执行此操作:

Route::get('/hostesses/search', array(['as' => 'hostesses.getsearch', 'uses' => 'HostessesController@getSearch');
Route::post('/hostesses/search', array(['as' => 'hostesses.postsearch', 'uses' => 'HostessesController@postSearch');
Route::resource('hostesses', 'HostessesController');


public function getSearch()
{
   return View::make('hostesses.search');
}

public function postSearch()
{
      // Do validation on form
      // Get search results and display
}

并更新您的表单

{{ Form::open(array('route' => 'hostesses.postsearch', 'class' => 'navbar-form navbar-right')) }}

答案 1 :(得分:0)

您需要定义POST路由:

Route::post('/hostesses/postSearch',array('as'=>'hostesses.search','uses' => 'HostessesController@postSearch'));

然后在您的控制器中

public function postSearch()
{

    var_dump(Input::get('search_term'));

}