Laravel 4:NotFoundHttpException

时间:2013-08-14 21:52:32

标签: exception laravel laravel-4 laravel-routing

我对Laravel来说真的很陌生,我正试图让一个表格一般地工作。

所以我有一个页面(admin / index),它只有一个表单,其中包含映射到AdminController @ test的路由。表单提交正常,但后来我得到一个NotFoundHttpException。 :(

index.blade.php中表单构建器的代码是:

@extends('layouts.master')

@section('title')
Admin
@stop

@section('content')
{{ Form::open(array('route' => 'test', 'method' => 'get')) }} <!-- Works with AdminController@index -->
    {{ Form::text('info') }}
{{ Form::close() }}
@stop

有问题的路线是:

    Route::get('/admin/test/' , array( 'as' => 'test' , 
                                       'uses' => 'AdminController@test'));

有问题的控制器是:

class AdminController extends BaseController{


    public function index(){
        return View::make('admin.index');
    }

    public function test(){
        error_log('Yay!');
    }

}

就像我说的那样,管理员/索引上的简单表单,提交,但它不会进入控制器,只是对NotFoundHttpException。

编辑: 表单的HTML如下所示:

<form method="GET" action="http://localhost/showknowledge/admin/test/" 
accept-charset="UTF-8">   
 <input name="info" type="text">
</form>

1 个答案:

答案 0 :(得分:3)

将路由逻辑移到AdminController并使用RESTful controller可能会更清楚:

<{1>}在routes.php中添加此内容,并删除/admin/index/admin/test的两个路由定义:

Route::controller('admin' , 'AdminController');

这会将admin/的所有请求定向到您的AdminController。现在你需要重命名你的函数以包含HTTP动词(GET,POST或任何),以及你的路线的下一个组成部分:

public function getIndex()  // for GET requests to admin/index
{ 
    //blha blah blah 
}

public function getTest()  // for GET requests to admin/test
{ 
    //blha blah blah 
}

最后,更新您的表单,直接通过action关键字

使用该路线
{{ Form::open(array('action' => 'AdminController@getTest', 'method' => 'get')) }}

请注意,使用missingMethod()来捕获未处理的请求也非常有用,Laravel文档中的更多信息:http://laravel.com/docs/controllers#handling-missing-methods

希望有所帮助